当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用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;
}
}
相关推荐
在本篇文章中,我们将深入探讨JPA中的联合主键实现,以及如何在实际项目中使用它。 首先,让我们理解联合主键的基本概念。在关系数据库中,主键是用来唯一标识表中每一行记录的字段或字段组合。在JPA中,我们可以...
在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来实现联合主键。 1. **@IdClass注解**:当你需要创建一个单独的类来表示联合主键时,可以使用@IdClass。例如,假设我们有一个`Student`实体和一个`Course`实体...
本篇文章将深入探讨JPA中的联合主键概念、实现方式以及其在实际应用中的使用场景。 ### JPA 基本概念 JPA 是一种Java规范,它提供了一种标准的方式来管理和持久化Java对象到关系数据库。通过使用JPA,开发者可以...
本文将深入探讨JPA中的联合主键概念、实现方式以及实际应用。 ### 1. 联合主键的概念 联合主键是指在数据库表中,通过两个或多个字段的组合来共同构成主键,以确保数据的唯一性。这种设计模式常用于那些单个字段...
2. **使用`@EmbeddedId`和`@Embeddable`注解**:如果联合主键的属性都属于同一个实体,你可以将这些属性嵌入到实体类内部,并使用`@Embeddable`注解这个嵌入类。然后在实体类上使用`@EmbeddedId`注解,指定这个嵌入...
本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合主键的定义方式。在Hibernate API中,有三种方法来定义联合主键: 1. 使用`@Embeddable`注解定义一个独立的主键类,然后将这个类的...
在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来处理联合主键。这两种方法有其不同的应用场景和优缺点。 1. **使用@IdClass** `@IdClass`注解允许我们创建一个独立的类(通常是`KeyClass`)来表示联合主键...
联合主键注解 (@EmbeddedId)** 对于复合主键,可以使用@EmbeddedId注解配合一个嵌入式类来表示。例如: ```java @Embeddable public class OrderId { private String orderId; private int customerId; } @...
在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来实现联合主键。 1. **@IdClass**:这种方式需要创建一个单独的类来表示联合主键,这个类需要实现Serializable接口,并且每个主键字段都用@Id注解标识。然后在...
在 Spring Data JPA 中,建立表的联合主键是一种常见的需求,本文将详细介绍如何使用 Spring Data JPA 建立表的联合主键,并提供了两种实现方式。 首先,我们需要了解什么是联合主键。在关系数据库中,主键是用于...
在 Java Persistence API(JPA)中,联合主键是指由多个字段组成的主键,可以使用@IdClass注解来实现。在本文中,我们将介绍如何使用@IdClass创建联合主键,并实现外部关联。 首先,我们需要创建三个实体类:...
本资料主要探讨Java程序中如何有效利用JPA注解进行数据库交互。 在Java程序中,JPA注解通常应用于实体类(Entity)及其属性上,这些注解定义了实体与数据库表之间的关系。例如,`@Entity`注解标记一个类为数据库表...
JPA规范的注解主要集中在`javax.persistence`包中,这些注解用于标注实体类、属性、关系等,使得ORM(对象关系映射)过程更加便捷。 在`javax.persistence`包中,有几个核心的注解,包括但不限于: 1. `@Entity`:...
联合主键使用@EmbeddedId和@Embeddable注解,将多个字段组合成一个复合主键,适用于那些不满足单一主键条件的表。 以上就是JPA学习笔记中的关键知识点,涵盖了JPA的基本概念、环境配置、对象关系映射、查询语言、...
- 在JPA中,实体类可以继承,通过`@Inheritance`注解可以定义继承策略,如单表继承(SINGLE_TABLE)、联合继承(JOINED)和子类表继承(TABLE_PER_CLASS)。 以上就是JPA中常用的一些注解及其功能,它们极大地简化...
JPA注解是实现ORM的关键,例如: - **@Table**: 指定实体对应的数据库表名。 - **@Column**: 定义列名、长度、是否可为空等属性。 - **@GeneratedValue**: 控制主键生成策略,如自动增长、序列等。 - **@Temporal**:...
JPA注解** - `@Entity`: 标记一个类为JPA实体。 - `@Table`: 定义实体映射到哪个数据库表。 - `@Id`: 标识主键字段。 - `@GeneratedValue`: 控制主键的生成策略,如自增、UUID等。 - `@Column`: 映射属性到数据库列...
8. **继承映射(Inheritance Mapping)**:JPA支持单表继承、联合继承和表格分层等策略,使你可以设计复杂的对象模型。 9. **懒加载(Lazy Loading)**:默认情况下,JPA实现如Hibernate支持懒加载,即关联的对象只...