Hibernate 当键名不同时休眠一对一关联

Hibernate 当键名不同时休眠一对一关联,hibernate,one-to-one,composite-primary-key,Hibernate,One To One,Composite Primary Key,我有两个组合id为一对一关系的表 表1:PK列:第1列、第2列 表2:PK列:第3列、第4列 列具有不同的名称。我必须将第1列映射到第3列,第2列映射到第4列。 表1(父表)声明: <class name="com.java.TABLE1" table="TABLE1"> <composite-id name="TABLE1_pk" class="com.tc4.dal.TABLE1_PK"> <key-property na

我有两个组合id为一对一关系的表

表1:PK列:第1列、第2列 表2:PK列:第3列、第4列

列具有不同的名称。我必须将第1列映射到第3列,第2列映射到第4列。 表1(父表)声明:

<class name="com.java.TABLE1" table="TABLE1">
        <composite-id name="TABLE1_pk" class="com.tc4.dal.TABLE1_PK">
            <key-property name="COLUMN1" column="COLUMN1" />
            <key-property name="COLUMN2" column="COLUMN3" />
        </composite-id>
...remaining properties declarations...

<one-to-one name="TABLE2" class="com.tc4.dal.TABLE2"
            cascade="save-update, delete">
             <key column="COLUMN3" property-ref="COLUMN1" />
            <key column="COLUMN4" property-ref="COLUMN2" />
</one-to-one> 
</class>
在这种情况下,如何在映射文件中提供一对一关联

问候,,
Naresh.

带注释的u可以这样实现。。在表1中

 @OneToOne(targetEntity = TABLE2.class, fetch = FetchType.LAZY)
   @JoinColumns(value = {
         @JoinColumn(name = "COLUMN1", referencedColumnName = "COLUMN3"),
         @JoinColumn(name = "COLUMN2", referencedColumnName = "COLUMN4") })
  TABLE2 table2
用XMl试试这个,让我知道

<class name="com.java.TABLE1" table="TABLE1">
        <composite-id name="TABLE1_pk" class="com.tc4.dal.TABLE1_PK">
            <key-property name="COLUMN1PROP" column="COLUMN1" />
            <key-property name="COLUMN2PROP" column="COLUMN3" />
        </composite-id>
...remaining properties declarations...

<one-to-one name="TABLE2" class="com.tc4.dal.TABLE2"
            cascade="save-update, delete">
             <key column="COLUMN1PROP" property-ref="COLUMN3PROP" />
            <key column="COLUMN2PROP" property-ref="COLUMN4PROP" />
</one-to-one> 
</class>

<class name="com.java.TABLE2" table="TABLE2">
        <composite-id name="TABLE2_pk" class="com.tc4.dal.TABLE2_PK">
            <key-property name="COLUMN3PROP" column="COLUMN3" />
            <key-property name="COLUMN4PROP" column="COLUMN4" />
        </composite-id>
</class>

…剩余属性声明。。。


…剩余属性声明。。。

让我知道哪一个有效。:)

将子表组合键列重命名为父表中的组合键列已解决此问题。 详细说明:- -父表(表1):

表1实体:

public class TABLE1{
  // declare PK
  private TABLE1_PK TABLE1_pk;
// getters and setters and remaining properties
}
  • 子表(表2):


    您是否可以显示其他映射细节,如如何映射复合id?根据问题
    LNBCPRODHDRP0
    的关键列名为
    BC\u银行ID、BC\u分行ID、BC\u产品\u NBR
    ,但在您的案例中,
    LNBCPRODHDRP0\u pk
    指的是
    LC\u银行ID、LC\u分行ID、LC\u产品\u NBR
    ,也请编辑原始问题以添加此信息。不要在注释中给出代码。@rahul maindargi,我已经编辑了我的问题。您能检查一下您使用的是哪个版本的hibernate吗?@Rahul,我使用的是hibernate 3.3Hi Rahul,谢谢您的回复。我正在使用基于xml的映射。我已经试过了你的第二个案子,它仍然引起异常。我怀疑您的第一个案例是否有效,因为这里的column标记应该引用column()@rahul maindargi、任何评论或任何其他建议??我也在搜索和浏览hibernate文档。我一发现什么就会更新答案:)@rahul maindargi,谢谢你刚刚救了我两天的困惑。谢谢顺便说一句,我正在使用xml映射。。按照您的建议使用“property ref”。但在我的例子中,它是多对一关系,我将“property ref”放在标记中
    <class name="com.java.TABLE1" table="TABLE1">
            <composite-id name="TABLE1_pk" class="com.tc4.dal.TABLE1_PK">
                <key-property name="COLUMN1PROP" column="COLUMN1" />
                <key-property name="COLUMN2PROP" column="COLUMN3" />
            </composite-id>
    ...remaining properties declarations...
    
    <one-to-one name="TABLE2" class="com.tc4.dal.TABLE2"
                cascade="save-update, delete">
                 <key column="COLUMN1PROP" property-ref="COLUMN3PROP" />
                <key column="COLUMN2PROP" property-ref="COLUMN4PROP" />
    </one-to-one> 
    </class>
    
    <class name="com.java.TABLE2" table="TABLE2">
            <composite-id name="TABLE2_pk" class="com.tc4.dal.TABLE2_PK">
                <key-property name="COLUMN3PROP" column="COLUMN3" />
                <key-property name="COLUMN4PROP" column="COLUMN4" />
            </composite-id>
    </class>
    
    <class name="com.java.TABLE1" table="TABLE1">
            <composite-id name="TABLE1_pk" class="com.tc4.dal.TABLE1_PK">
                <key-property name="COLUMN1PROP" column="COLUMN1" />
                <key-property name="COLUMN2PROP" column="COLUMN3" />
            </composite-id>
    ...remaining properties declarations...
    
    <one-to-one name="TABLE2" class="com.tc4.dal.TABLE2"
                cascade="save-update, delete">
                 <key column="COLUMN1" property-ref="COLUMN3PROP" />
                <key column="COLUMN2" property-ref="COLUMN4PROP" />
    </one-to-one> 
    </class>
    
    <class name="com.java.TABLE2" table="TABLE2">
            <composite-id name="TABLE2_pk" class="com.tc4.dal.TABLE2_PK">
                <key-property name="COLUMN3PROP" column="COLUMN3" />
                <key-property name="COLUMN4PROP" column="COLUMN4" />
            </composite-id>
    </class>
    
    <class name="com.java.TABLE1" table="TABLE1">
                <composite-id name="TABLE1_pk" class="com.tc4.dal.TABLE1_PK">
                    <key-property name="COLUMN1Prop" column="COLUMN1" />
                    <key-property name="COLUMN2Prop" column="COLUMN3" />
        </composite-id>
        .... remaining properties
        </class>
    
    public class TABLE1_PK {
        public String COLUMN1Prop;
        public String COLUMN2Prop;
      }
    
    public class TABLE1{
      // declare PK
      private TABLE1_PK TABLE1_pk;
    // getters and setters and remaining properties
    }
    
     <class name="com.java.TABLE2" table="TABLE2">
                         <composite-id name="TABLE2_pk" class="com.tc4.dal.TABLE2_PK">
                             <key-property name="COLUMN1Prop" column="COLUMN3" />
                             <key-property name="COLUMN2Prop" column="COLUMN4" />
                 </composite-id>
                 .... remaining properties
          </class>
    
    public class TABLE2_PK{
    // here property names should be defined as parent Entity properties
            public String COLUMN1Prop;
            public String COLUMN2Prop;
    .. getters and setters
    }