組件作為聯合標識符,必須滿足:
它必須實現java.io.Serializable接口
它必須重新實現equals()和hashCode()方法, 始終和組合關鍵字在數據庫中的概念保持一致
你不能使用一個IdentifierGenerator產生組合關鍵字。一個應用程序必須分配它自己的標識符。
【注意:在Hibernate3中,第二個要求并非是Hibernate強制必須的。但最好這樣做。】

?<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;
?}
}