如果一个表有多个主键,在jpa的注解里面应该是描述联合主键。
注意:一定要养成一个习惯,无论什么时候在新建立一个VO的时候,一定要给这个VO相应的空的构造方法。
1.建立一个主键类,这个类主要是描述联合主键里面所包含的的字段。
2.覆写这个类的equals和hashcode方法。
3.一定要序列化
package com.sysc.wenxuan.exam.model;
import java.io.Serializable;
import javax.persistence.Embeddable;
/**
* 定义考试关系表的联合主键
* @author Administrator
*
*/
@Embeddable //注解这个类将会应用到联合主键
public class ExamPaperPK implements Serializable{
private static final long serialVersionUID = 1L;
private int examID;
private int resSubject;
public ExamPaperPK(){}
public int getExamID() {
return examID;
}
public void setExamID(int examID) {
this.examID = examID;
}
public int getResSubject() {
return resSubject;
}
public void setResSubject(int resSubject) {
this.resSubject = resSubject;
}
@Override
public boolean equals(Object obj) {
if(obj == null)
return false;
if (this == obj)
return true;
if(obj instanceof ExamPaperPK){
ExamPaperPK id = (ExamPaperPK)obj;
if(this.examID == id.getExamID() && this.resSubject == id.getResSubject())
return true;
}
return false;
}
@Override
public int hashCode() {
return (String.valueOf(examID)+String.valueOf(resSubject)).hashCode();
}
}
对应的表的VO的jpa注解:
package com.sysc.wenxuan.exam.model;
import java.sql.Timestamp;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="eps_exam_paper")
public class ExamPaper {
private int paperID;
private int tplID;
private Timestamp examTime;
private String paperRowDef;
public ExamPaper(){
}
private ExamPaperPK pk;//声明一个联合主键类的变量
@EmbeddedId//注明,告诉数据库这个变量将是联合主键
@AttributeOverrides( {//分别定义联合主键里面的各个字段对应的是数据库里面那个字段
其中name = "examID"是联合主键类里面的属性, column = @Column(name = "EXAM_ID")是数据库表对应的字段
@AttributeOverride(name = "examID", column = @Column(name = "EXAM_ID")),
@AttributeOverride(name = "resSubject", column = @Column(name = "RES_SUBJECT")) })
public ExamPaperPK getPk() {
return pk;
}
public void setPk(ExamPaperPK pk) {
this.pk = pk;
}
@Column(name="PAPER_ID")
public int getPaperID() {
return paperID;
}
public void setPaperID(int paperID) {
this.paperID = paperID;
}
@Column(name="TPL_ID")
public int getTplID() {
return tplID;
}
public void setTplID(int tplID) {
this.tplID = tplID;
}
@Column(name="EXAM_TIME")
public Timestamp getExamTime() {
return examTime;
}
public void setExamTime(Timestamp examTime) {
this.examTime = examTime;
}
@Column(name="PAPER_ROW_DEF")
public String getPaperRowDef() {
return paperRowDef;
}
public void setPaperRowDef(String paperRowDef) {
this.paperRowDef = paperRowDef;
}
}