[英]Hibernate composite-key and foreign generator
我正在嘗試使子類的外鍵自動獲取其父類的ID。
子班:
public class Child implements Serializable
{
// primary (composite) key
private int parentId; // I want this to be set automatically
private String name;
// random value
private String val;
public Child(String name, String val) {
this.name = name;
this.val = val;
}
public void setParentId(int id) {
[...]
}
父XML:
<map name="children" inverse="true" lazy="true" cascade="all,delete-orphan">
<cache usage="nonstrict-read-write"/>
<key column="parent_id"/>
<index column="child_name" type="string"/>
<one-to-many class="myPack.Child"/>
</map>
子xml:
<class name="Child" table="child_tbl" lazy="true">
<composite-id>
<key-property name="ParentId" type="int" column="parent_id"/>
<key-property name="Name" column="name" type="string"/>
<generator class="foreign">
<param name="property">ParentId</param>
</generator>
</composite-id>
<property name="Val" blablabla
[...]
但是,它失敗了:
HibernateException:無法解析屬性:ParentId
Hibernate是否在復合ID上支持外國生成器? 還是父類持有Map的事實?
我自己嘗試過,對我有用
注意,子類必須實現equals()
和hashCode()
方法。
public class Parent {
private int id;
private String name;
//...getter setter methods
}
public class Child implements Serializable{
private Parent parent;
private String name;
public boolean equals(Object c){
//implement this
}
public int hashCode(){
//implement this
}
//..getter setter methods
}
注意 :
many-to-one
映射設置為unique="true"
表示one-to-one
關系 insert="false"
和update="false"
因為該列被用作composite-id
。 子類映射:
<class name="Child" table="CHILD" dynamic-update="true">
<composite-id>
<key-property name="name"></key-property>
<key-many-to-one name="parent" class="Parent" column="id"/>
</composite-id>
<many-to-one name="parent" class="Parent"
unique="true" column="id" insert="false" update="false" />
</class>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.