Hibernate初级

Hibernate初级,第1张

一 XSD 1 问题 ① 复合主键 Ⅰ 报错详情
Could not parse mapping document: null (INPUT_STREAM)
org.hibernate.boot.InvalidMappingException: Could not parse mapping document: null (INPUT_STREAM)
	at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:46)

Caused by: org.hibernate.boot.MappingException: Unable to perform unmarshalling at line number 7 and column 13. Message: cvc-enumeration-valid: Value 'true' is not facet-valid with respect to enumeration '[false, proxy]'. It must be a value from the enumeration. : origin(null)

Caused by: javax.xml.bind.UnmarshalException: null

报错的意思是使用了未定义的枚举值true,就报错了

Ⅱ 分析

首先看报错的源文件,定位到true这里:

		<composite-id>
            <key-many-to-one class="Xxx" lazy="true" name="Xxxx">
                <column length="32" name="ID">
                    <comment>comment>
                column>
            key-many-to-one>
        composite-id>

找到hibernate-core-5.0.11.Final.jar包,反编译看到文件-org.hibernate.xsd.mapping.legacy-mapping-4.0.xsd里的内容,找到composite-id的规范定义:

<xs:complexType name="CompositeIdType">
        省略
                        <xs:element name="key-many-to-one" type="CompositeKeyManyToOneType"/>
                    xs:choice>
                    省略
    xs:complexType>

再找key-many-to-one对应的CompositeKeyManyToOneType的定义,进而找到:

<xs:attribute name="lazy" type="LazyEnum"/>
<xs:simpleType name="LazyEnum">
        <xs:restriction base="xs:token">
            <xs:enumeration value="false"/>
            <xs:enumeration value="proxy"/>
        xs:restriction>
    xs:simpleType>

这里发现枚举值不包含true的。因此进行xml验证时报错了

Ⅲ 结论
  • 请不要使用没定义的枚举值
二 属性 1 懒加载 ① lazy 依赖顺序
lazy="true"

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存