組件作為聯(lián)合標(biāo)識(shí)符,必須滿足:
它必須實(shí)現(xiàn)java.io.Serializable接口
它必須重新實(shí)現(xiàn)equals()和hashCode()方法, 始終和組合關(guān)鍵字在數(shù)據(jù)庫(kù)中的概念保持一致
你不能使用一個(gè)IdentifierGenerator產(chǎn)生組合關(guān)鍵字。一個(gè)應(yīng)用程序必須分配它自己的標(biāo)識(shí)符。
【注意:在Hibernate3中,第二個(gè)要求并非是Hibernate強(qiáng)制必須的。但最好這樣做。】
?<class name="com.jason.compositeId.OrderDetail" table="t_orderdetail">
??<composite-id name="id" class="com.jason.compositeId.CompositeId">
??????<key-property name="orderId" column="order_id" />
??????<key-property name="itemId" column="item_id" />
??</composite-id>
??<property name="count" column="count" type="int" />
?</class>
?<!--
??create table t_orderdetail ( order_id bigint not null, item_id bigint not null, count bigint not null, primary key(order_id, item_id) )
?-->
?
?
public class CompositeId
implements Serializable{
?private int orderId;
?private int itemId;
?public int getItemId() {
??return itemId;
?}
?public void setItemId(int itemId) {
??this.itemId = itemId;
?}
?public int getOrderId() {
??return orderId;
?}
?public void setOrderId(int orderId) {
??this.orderId = orderId;
?}
?@Override
?public boolean
equals(Object obj) {
??return super.equals(obj);
?}
?@Override
?public int
hashCode() {
??return (orderId + itemId)^2;
?}
??
}
public class OrderDetail {
?private CompositeId id;
?private int count;
?
?public int getCount() {
??return count;
?}
?public void setCount(int count) {
??this.count = count;
?}
?public CompositeId getId() {
??return id;
?}
?public void setId(CompositeId id) {
??this.id = id;
?}
}