composite-id 学习

组件作为联合标识符,必须满足:
它必须实现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;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值