简体   繁体   English

休眠一对多关系Hbm Xml错误

[英]Hibernate One To Many Relation Hbm Xml Error

I want to create relation between Definition (DEF) and Details (DET) table by foreign keys in Hibernate. 我想通过Hibernate中的外键在定义(DEF)和详细信息(DET)表之间创建关系。 In this case, one definition has multiple details. 在这种情况下,一个定义具有多个细节。

  • Definition table has ID column as PK 定义表的ID列为PK
  • Details table has ID column as PK and DEFINITION_ID as FK 详细信息表的ID列为PKDEFINITION_IDFK

When I connect these inside of hbm.xml I am getting an error such as; 当我将它们连接到hbm.xml内部时,出现诸如以下错误:

ERROR 错误

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet column: ID (should be mapped with insert="false" update="false") 由以下原因引起:org.hibernate.MappingException:实体的映射中重复的列:com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet列:ID(应与insert =“ false” update =“ false”映射)

DEFINITION HBM XML 定义HBM XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDef"
        table="CMS_EXEMPT_RESTRICT_DEF">
        <tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
            entity-mode="pojo" />
        <id name="oid" type="java.lang.Long">
            <column name="ID" />
            <generator class="sequence">
                <param name="sequence">SEQ_CMS_EXEMPT_RESTRICT_DEF</param>
            </generator>
        </id>

        .
        .
        .

        <bag name="cmsExemptRestrictDetails" table="CMS_EXEMPT_RESTRICT_DET"
            inverse="true" lazy="true" fetch="select">
            <key>
                <column name="DEFINITION_ID" not-null="true" />
            </key>
            <one-to-many
                class="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet" />
        </bag>
    </class>
</hibernate-mapping>

DETAIL HBM XML 详细HBM XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet"
        table="CMS_EXEMPT_RESTRICT_DET">
        <tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
            entity-mode="pojo" />
        <id name="oid" type="java.lang.Long">
            <column name="ID" />
            <generator class="sequence">
                <param name="sequence">SEQ_CMS_EXEMPT_RESTRICT_DET</param>
            </generator>
        </id>

        <many-to-one name="cmsExemptRestrictDefinition" class="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDef" fetch="select">
            <column name="ID" not-null="true" />
        </many-to-one>

        <property name="definitionId" type="java.lang.Long">
            <column name="DEFINITION_ID" />
        </property>
    </class>
</hibernate-mapping>

First - Do I need to define both many to one and one to many relation in each hbm xmls? 首先-我是否需要在每个hbm xml中定义多对一和一对多关系?

Second - Do I need to rename column ID of Detail something like DETAIL_ID? 第二-我是否需要将DETAIL_ID之类的重命名列ID重命名?

Thanks. 谢谢。

The property mapping Definition_id is incorrect. 属性映射Definition_id不正确。 The foreign key should not be mapped. 外键不应该被映射。 Remove it and change the column name in manytoone mapping to definition_id: 删除它,然后将多音映射中的列名更改为definition_id:

Change the detail hbm xml to: 将详细信息hbm xml更改为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet"
        table="CMS_EXEMPT_RESTRICT_DET">
        <tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
            entity-mode="pojo" />
        <id name="oid" type="java.lang.Long">
            <column name="ID" />
            <generator class="sequence">
                <param name="sequence">SEQ_CMS_EXEMPT_RESTRICT_DET</param>
            </generator>
        </id>

        <many-to-one name="cmsExemptRestrictDefinition" class="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDef" fetch="select">
            <column name="DEFINITION_ID" not-null="true" />
        </many-to-one>

           </class>
</hibernate-mapping>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM