当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码
1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化。
package com.ericsson.adp.entity.cons;
import java.io.Serializable;
public class ConsumerGroupMapPK implements Serializable{
private String msisdn;//电话号码
private Long tagGroupId;//(10)标签组id
public String getMsisdn() {
return msisdn;
}
public void setMsisdn(String msisdn) {
this.msisdn = msisdn;
}
public Long getTagGroupId() {
return tagGroupId;
}
public void setTagGroupId(Long tagGroupId) {
this.tagGroupId = tagGroupId;
}
}
然后再写一个类,该类对应数据库中的表,在该类中需要使用@IdClass(ConsumerGroupMapPK.class)引入上面写的复合主键类
同时在需要做成联合主键的属性上面加上@Id标明该属性是主键就好了
package com.ericsson.adp.entity.cons;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@IdClass(ConsumerGroupMapPK.class)
@Table(name="T_CONS_CONSUMER_GROUP_MAP")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class ConsumerGroupMap{
@Id
private String msisdn;//电话号码
@Id
private Long tagGroupId;//(10)标签组id
public ConsumerGroupMap() {
super();
// TODO Auto-generated constructor stub
}
public ConsumerGroupMap(String msisdn, Long tagGroupId) {
super();
this.msisdn = msisdn;
this.tagGroupId = tagGroupId;
}
public String getMsisdn() {
return msisdn;
}
public void setMsisdn(String msisdn) {
this.msisdn = msisdn;
}
public Long getTagGroupId() {
return tagGroupId;
}
public void setTagGroupId(Long tagGroupId) {
this.tagGroupId = tagGroupId;
}
}