jpa怎么配置联合主键

如果一个表有多个主键,在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;

}

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值