Java 使用时获取NPE<;缓存使用率=“;只读”/&燃气轮机;在Hibernate 5.2.11中的HBMXML中

Java 使用时获取NPE<;缓存使用率=“;只读”/&燃气轮机;在Hibernate 5.2.11中的HBMXML中,java,hibernate,orm,hibernate-mapping,Java,Hibernate,Orm,Hibernate Mapping,我已经将Hibernate版本从Hibernate ORM 4.3升级到5.2.11版本,我们正在使用Hibernate框架使用.hbmxml文件。我们遇到了一个现在抛出NPE的用例,它是一个在实体定义中使用缓存使用属性的简单用例 我们的hbmxml文件的简化版本如下所示 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

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

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

<!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 5.2.11版时,这在Hibernate的旧版本中运行得非常好,但它已经开始抛出以下异常

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)
java.lang.NullPointerException
位于com.sun.xml.bind.v2.runtime.unmarshaller.statxconnector$1.getPublicId(statxconnector.java:101)
位于org.apache.xerces.util.SAXLocatorWrapper.getPublicId(未知源)
位于org.apache.xerces.xni.parser.XMLParseException。(未知源)
位于org.apache.xerces.impl.XMLErrorReporter.reportError(未知源)
位于org.apache.xerces.impl.XMLErrorReporter.reportError(未知源)
位于org.apache.xerces.impl.XMLErrorReporter.reportError(未知源)
位于org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(未知源)
位于org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(未知源)
位于org.apache.xerces.impl.xs.XMLSchemaValidator.handlestarelement(未知源)
位于org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(未知来源)
位于org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.startElement(未知源)
位于com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:101)
位于com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:75)
位于com.sun.xml.bind.v2.runtime.unmarshaller.StAXEventConnector.handlestarelement(StAXEventConnector.java:261)
位于com.sun.xml.bind.v2.runtime.unmarshaller.statxeventconnector.bridge(statxeventconnector.java:130)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:460)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:435)
位于org.hibernate.boot.jaxb.internal.AbstractBinder.jaxb(AbstractBinder.java:171)
位于org.hibernate.boot.jaxb.internal.MappingBinder.doBind(MappingBinder.java:61)
位于org.hibernate.boot.jaxb.internal.AbstractBinder.doBind(AbstractBinder.java:102)
位于org.hibernate.boot.jaxb.internal.AbstractBinder.bind(AbstractBinder.java:84)
位于org.hibernate.boot.jaxb.internal.JaxpSourceXmlSource.doBind(JaxpSourceXmlSource.java:29)
位于org.hibernate.boot.MetadataSources.addDocument(MetadataSources.java:409)
位于org.hibernate.cfg.Configuration.addDocument(Configuration.java:462)
我曾尝试使用Hibernate ORM源代码进行调试,但没有得到太多帮助,无法解释为什么我们要在这个场景中使用NPE

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

<cache usage="read-only"/>

属性,如果我们删除它,它就可以正常工作

提前感谢你的帮助


谢谢,

所以我得到了这个问题,生成的xml的问题是缓存节点应该在tuplizer节点之后,就像正在使用的模式一样,它需要缓存节点在tuplizer之后,我从hibernate论坛上解决了这个问题。讨论的细节是@

NPE似乎是jaxb实现中的一个错误,但如果您稍微查看堆栈,它会试图告诉您在调用
XMLSchemaValidator.reportSchemaError
的地方存在验证错误。但是,DTD似乎应该接受此版本中的值。能否从文件的开头添加XML名称空间/架构/DTD映射,以便我知道要调查哪个文件?当然@coladict,我已在原始XML中添加了文件的完整映射。我正在使用以下映射,以便进一步了解它,我发现问题似乎出在HibernateAPI上,即configuration.addFile(“src/test/resources/configsetingswithoutcache.xml”);与此相关的更多详细信息已在