如果一个表有多个主键,在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;
}
}
相关推荐
### JPA注解实现联合主键 在关系型数据库中,单个字段作为主键的情况较为常见,但在某些场景下,我们需要使用多个字段共同作为主键来唯一标识表中的每一条记录,这就是所谓的“联合主键”。而在Java持久化框架...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识数据库表中每一行记录的关键字段。在某些情况下,一个实体可能需要多个字段来唯一标识其实例,这时就需要使用联合主键。本篇文章将深入...
本教程将聚焦于JPA中的一个关键概念——联合主键(Composite Key),这是处理多字段主键的一种方式。 联合主键是指在数据库表中,由两个或多个字段共同构成的唯一标识,这些字段的组合必须是唯一的。在JPA中,我们...
在Java Persistence API (JPA) 中,联合主键(Composite Key)是指由两个或更多个字段共同组成的主键,这与单字段主键(Single Field Primary Key)相对。这种设计模式通常用于那些需要多个属性来唯一标识实体的情况...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识实体的关键字段。通常,一个实体可能只有一个主键字段,但有些情况下,为了实现唯一标识,可能需要使用两个或多个字段的组合,这就是...
**JPA联合主键详解** 在Java Persistence API (JPA) 中,主键是用于唯一标识实体的关键字段。在很多情况下,一个实体的主键可能不是由单一字段组成,而是由两个或更多个字段共同构成,这样的主键就被称为联合主键...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第15讲 JPA中的联合主键.avi
在JPA中,**联合主键(Composite Key)** 是指由两个或多个属性共同构成的主键,这与单个属性的简单主键相对。联合主键通常用于那些通过多个字段来唯一标识实体的情况。在关系数据库中,联合主键确保了表中每行数据...
Spring Data JPA 建立表的联合主键 在 Spring Data JPA 中,建立表的联合主键是一种常见的需求,本文将详细介绍如何使用 Spring Data JPA 建立表的联合主键,并提供了两种实现方式。 首先,我们需要了解什么是联合...
### 一、JPA 联合主键(Composite Key) 联合主键(Composite Key)是指由两个或更多个属性组成的主键,这些属性共同决定了实体的唯一性。在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来实现联合主键。 1....
在 Java Persistence API(JPA)中,联合主键是指由多个字段组成的主键,可以使用@IdClass注解来实现。在本文中,我们将介绍如何使用@IdClass创建联合主键,并实现外部关联。 首先,我们需要创建三个实体类:...
JPA主键策略详解 JPA(Java Persistence API)是一个Java标准,用于对象关系映射(ORM)。在JPA中,主键策略是指生成主键的机制,用于标识数据库表中的每一行记录。在本文中,我们将详细讨论JPA主键策略的类型、...
在Java Hibernate框架中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这在处理一些特定的数据模型时非常有用。本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合...
JPA中的联合主键** 联合主键使用@EmbeddedId和@Embeddable注解,将多个字段组合成一个复合主键,适用于那些不满足单一主键条件的表。 以上就是JPA学习笔记中的关键知识点,涵盖了JPA的基本概念、环境配置、对象...
- 通常情况下,还需要指定外键字段(`mappedBy`)或者联合主键(`@PrimaryKeyJoinColumn`)来明确关联关系。 - **一对多关联**: - 使用`@OneToMany`注解表示一对多关系,通常还需要使用`@JoinColumn`或`@JoinTable`来...
#### 十、JPA联合主键 - **概念介绍**: - 联合主键是指使用多个字段共同组成一个复合主键。 - **应用场景**: - 当单个字段不足以唯一标识一条记录时,可以考虑使用联合主键。 - **实现方式**: - 通过在实体类上...
联合主键(Composite Key)** - 当主键由两个或更多个字段组成时,可以使用`@IdClass`或`@EmbeddedId`来定义。 **7. 异步和缓存** - **异步处理**: 可以结合Java的ExecutorService或Spring的AsyncConfigurer进行...
8. **继承映射(Inheritance Mapping)**:JPA支持单表继承、联合继承和表格分层等策略,使你可以设计复杂的对象模型。 9. **懒加载(Lazy Loading)**:默认情况下,JPA实现如Hibernate支持懒加载,即关联的对象只...
- **环境配置**: 如设置persistence.xml文件,配置数据源、实体管理工厂等。 - **实体的创建与持久化**: 如`EntityManager`的`persist()`方法将对象保存到数据库。 - **查询操作**: 使用`find()`, `createQuery()`, ...
- **复合主键**:`@EmbeddedId`和`@IdClass`用于处理复杂的主键结构。 - **继承映射**:支持单表继承(Single Table Inheritance)、联合继承(Joined Table Inheritance)和表-per-class-hierarchy策略。 - **...