首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Hibernate 5.2.11中使用HBMXML中的缓存usage=“只读”/>时获取NPE

在Hibernate 5.2.11中使用HBMXML中的缓存usage=“只读”/>时获取NPE
EN

Stack Overflow用户
提问于 2020-11-05 17:29:31
回答 1查看 70关注 0票数 0

我已经将Hibernate版本从Hibernate ORM4.3升级到5.2.11版本,我们使用的是使用.hbmxml文件的hibernate框架。我们遇到了一个抛出NPE的用例,这是一个在实体定义中使用缓存使用属性的简单用例。

我们的hbmxml文件的简化版本如下所示

代码语言:javascript
复制
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class entity-name="CountryCrash" lazy="true"
        name="xyz.test.CountryCrash" table="COUNTRY">
        <cache usage="read-only"/>
        <id name="id" type="long" unsaved-value="0">
            <column name="ID"/>
            <generator class="sequence">
                <param name="sequence">GENERAL_SEQUENCE</param>
            </generator>
        </id>
        <property name="name" type="string">
            <column name="NAME"/>
        </property>
    </class>
</hibernate-mapping>

虽然这在旧版本的Hibernate上工作得很好,但随着升级到Hibernate版本5.2.11,它开始抛出以下异常

代码语言:javascript
复制
java.lang.NullPointerException
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXConnector$1.getPublicId(StAXConnector.java:101)
    at org.apache.xerces.util.SAXLocatorWrapper.getPublicId(Unknown Source)
    at org.apache.xerces.xni.parser.XMLParseException.<init>(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
    at org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.startElement(Unknown Source)
    at com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:101)
    at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:75)
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXEventConnector.handleStartElement(StAXEventConnector.java:261)
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXEventConnector.bridge(StAXEventConnector.java:130)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:460)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:435)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.jaxb(AbstractBinder.java:171)
    at org.hibernate.boot.jaxb.internal.MappingBinder.doBind(MappingBinder.java:61)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.doBind(AbstractBinder.java:102)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.bind(AbstractBinder.java:84)
    at org.hibernate.boot.jaxb.internal.JaxpSourceXmlSource.doBind(JaxpSourceXmlSource.java:29)
    at org.hibernate.boot.MetadataSources.addDocument(MetadataSources.java:409)
    at org.hibernate.cfg.Configuration.addDocument(Configuration.java:462)

我试着使用Hibernate ORM源进行调试,但没有得到太多帮助,为什么我们在这个场景中获得了NPE。

如果我错过了什么,或者我们在升级过程中错过了什么,请让我知道。只有当我们添加了

代码语言:javascript
复制
<cache usage="read-only"/>

属性,如果我们删除它,它就能正常工作。

提前感谢您的帮助。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-12 04:26:06

所以我得到了问题,生成的xml的问题是缓存节点应该在Tuplizer节点之后,因为正在使用的架构是http://hibernate.org/xsd/orm/hbm/legacy-mapping-4.0.xsd,它需要缓存节点在tuplizer之后,我从hibernate论坛解决了这个问题。讨论的详细信息是@ https://discourse.hibernate.org/t/getting-npe-while-using-cache-usage-read-only-in-hbmxml-in-hibernate-5-2-11/4730

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64694442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档