Hibernate 当键名不同时休眠一对一关联
我有两个组合id为一对一关系的表 表1:PK列:第1列、第2列 表2:PK列:第3列、第4列 列具有不同的名称。我必须将第1列映射到第3列,第2列映射到第4列。 表1(父表)声明: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
<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
,也请编辑原始问题以添加此信息。不要在注释中给出代码。@rahul maindargi,我已经编辑了我的问题。您能检查一下您使用的是哪个版本的hibernate吗?@Rahul,我使用的是hibernate 3.3Hi Rahul,谢谢您的回复。我正在使用基于xml的映射。我已经试过了你的第二个案子,它仍然引起异常。我怀疑您的第一个案例是否有效,因为这里的column标记应该引用column()@rahul maindargi、任何评论或任何其他建议??我也在搜索和浏览hibernate文档。我一发现什么就会更新答案:)@rahul maindargi,谢谢你刚刚救了我两天的困惑。谢谢顺便说一句,我正在使用xml映射。。按照您的建议使用“property ref”。但在我的例子中,它是多对一关系,我将“property ref”放在标记中LC\u银行ID、LC\u分行ID、LC\u产品\u NBR
<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 }