Hibernate映射相同的列两次

时间:2011-09-28 02:31:25

标签: java hibernate java-ee hibernate-mapping hbmxml

如何解决这个问题

  

实体映射中的重复列:com.abc.domain.PersonConnect   column:PERSON_ID(应使用insert =“false”进行映射   更新= “假”)

这是我的hbm文件的片段

<class name="com.abc.domain.PersonConnect" table="PERSON_CONNECT">    
    <composite-id>
        <key-many-to-one name="Parent" class="com.abc.domain.Person" column="PARENT_PERSON_ID"/>
        <key-many-to-one name="Child" class="com.abc.domain.Person" column="CHILD_PERSON_ID"/>
    </composite-id>

    <many-to-one class="com.abc.domain.Person" fetch="select" name="parent" lazy="false" > 
        <column length="20" name="PERSON_ID" not-null="true"/> 
    </many-to-one> 
    <many-to-one class="com.abc.domain.Person" fetch="select" name="child" lazy="false" > 
        <column length="20" name="PERSON_ID" not-null="true"/> 
    </many-to-one>    
</class>

,表就像这样

Person_Connect

  • PK - PARENT_PERSON_ID
  • PK - CHILD_PERSON_ID

  • PK - PERSON_ID
  • FNAME
  • L-NAME

2 个答案:

答案 0 :(得分:2)

您的映射是错误的,这是正确的映射。在多对一方面,列名称是同一个表中的列,它是引用Person的主键的外键。

<class name="com.abc.domain.PersonConnect" table="PERSON_CONNECT">

 <composite-id>
    <key-many-to-one name="Parent" class="com.abc.domain.Person" column="PARENT_PERSON_ID"/>
    <key-many-to-one name="Child" class="com.abc.domain.Person" column=" CHILD_PERSON_ID"/>
     </composite-id>

</class>

答案 1 :(得分:1)

嗯,首先,似乎不应该将“Parent”和“Child”都映射到同一列。那可能是个问题。否则,请执行错误说明,并将insert="false" update="false"添加到其中一个列映射中。列只能“属于”单个属性。否则,您可以进入无法解决的情况,其中一个属性表示值应为x而另一个属性表示它应为y