关于hibernate注解组合主键使用

hibernate的annotation的文档中提供了三种方法 
  1 将组件类注解为@Embeddable,并将组件的属性注解为@Id 
  2 将组件的属性注解为@EmbeddedId (方便) 
  3 将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id(符合编程习惯)
主键类需要序列化(考虑到可能会将数据读写到虚拟内存中),需要重写hashcode()和equals()方法,因为要对联合主键进行比较. 

 

网络的用法:

@Entity  
public class RegionalArticle implements Serializable {  
  
    @Id  
    public RegionalArticlePk getPk() { ... }  
}  
  
@Embeddable  
public class RegionalArticlePk implements Serializable { ... }   

类似继承属性设置

我的用法:

@Entity
@IdClass(value = AdvResourcePK.class)
@Table(name="XXXXX")
public class AdvResource implements Serializable {
   private String advId;
	
	private String type;
  /**
	 * @return advId
	 */
	@Id
	@Column(name="adv_id",length=24)
	public String getAdvId() {
		return advId;
	}

	/**
	 * @param advId
	 */
	public void setAdvId(String advId) {
		this.advId = advId;
	}

	
	/**
	 * @return type
	 */
	@Id
	@Column(name="type",length=20)
	public String getType() {
		return type;
	}
  ...
}

@Embeddable
public class AdvResourcePK implements Serializable{
  private String advId;
	
	private String type;
}

 

也和明显: Po类中@Id了两个属性; PK类中,同时设置2个属性,主要便于查询和保存

查看详情时:

public AdvResource getDetailByAdvResource(String advId,String type){
		AdvResourcePK temp =new AdvResourcePK();
		temp.setAdvId(advId);
		temp.setType(type);
		AdvResource temp2 = (AdvResource) get(AdvResource.class, temp);
		return temp2;
	}

根据PK类来成为唯一键,进行更新和删除都没有问题的;

新增时: 保证两个主键唯一,就可以插入成功了;

 

 

转载于:https://my.oschina.net/java1314/blog/848415

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值