Java Hibernate与复合元素的自有集合的双向关系
我想在两个实体之间创建一个非常经典的双向父子关系。守则:Java Hibernate与复合元素的自有集合的双向关系,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我想在两个实体之间创建一个非常经典的双向父子关系。守则: public class History { public Long id; public List<HistoryField> fields; } public class HistoryField { public History history; public String foo, bar; } 但是如何在映射中指定HistoryField::history与所属实体history之
public class History {
public Long id;
public List<HistoryField> fields;
}
public class HistoryField {
public History history;
public String foo, bar;
}
但是如何在映射中指定HistoryField::history
与所属实体history
之间的链接
这里的诀窍是集合是拥有的,并定义为复合元素(没有
HistoryField
的ID,主键是对history\u ID
+order\u index
)。这里不适用双向亲子关系的经典例子;当他们解释两个类与ID之间的关系时,然而在这里,拥有的类没有一个。文档指出,您可以为
定义一个
元素,虽然它没有在
指定的组件集合的上下文中明确提到这一点,但我猜它应该可以工作
元素允许映射
属性作为对包含
实体
因此:
<class name="History" table="history">
<id name="id" type="long" />
<list name="fields" cascade="all" table="fields">
<key column="history_id" />
<list-index column="order_index" />
<composite-element class="HistoryField">
<!-- name of the property refeencing the containing entity -->
<parent name="history"/>
<property name="foo" />
<property name="bar" />
</composite-element>
</list>
</class>
@尼古拉斯不太喜欢。这里的诀窍是,它是一个无ID的
历史字段
,属于历史
(在数据库中,主键是成对的历史(ID
+顺序)索引
)。因此,我需要一个复合元素
。我尝试使用复合ID,但在这种情况下,如何将order\u index
定义为由hibernate管理的自有列表的索引元素?我假定order\u索引与主键分开。它不需要是AFAIK主键的一部分。显示您尝试了什么,并询问您遇到的任何问题。在我的数据库模型中,history字段
的主键需要history\u id
+order\u index
,这是一种多对一关系。我不想改变我的数据库模型来解决hibernate映射问题,我明白了。好问题。我还没有弄明白如何在注释中实现它。我将删除我的复制标志。
<class name="History" table="history">
<id name="id" type="long" />
<list name="fields" cascade="all" table="fields">
<key column="history_id" />
<list-index column="order_index" />
<composite-element class="HistoryField">
<!-- name of the property refeencing the containing entity -->
<parent name="history"/>
<property name="foo" />
<property name="bar" />
</composite-element>
</list>
</class>
@Embeddable
public class HistoryField {
@Parent
public History history;
public String foo, bar;
}