/**
* 联合主键
*
* 1、必须实现Serializable序列化 2、必须提示无参的构造方法 3、必须重写hashCode和equals方法
*
* @Embeddable 表示该类中所有属性在应用该联合主键的类中作为它的属性(字段)
* @author 张明学
*
*/
@Embeddable
public class AirLinePK implements Serializable {
private String staCity;
private String endCity;
public AirLinePK() {
}
public AirLinePK(String staCity, String endCity) {
this.staCity = staCity;
this.endCity = endCity;
}
@Column(nullable = false, length = 32)
public String getStaCity() {
return staCity;
}
public void setStaCity(String staCity) {
this.staCity = staCity;
}
@Column(nullable = false, length = 32)
public String getEndCity() {
return endCity;
}
public void setEndCity(String endCity) {
this.endCity = endCity;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((endCity == null) ? 0 : endCity.hashCode());
result = PRIME * result + ((staCity == null) ? 0 : staCity.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final AirLinePK other = (AirLinePK) obj;
if (endCity == null) {
if (other.endCity != null)
return false;
} else if (!endCity.equals(other.endCity))
return false;
if (staCity == null) {
if (other.staCity != null)
return false;
} else if (!staCity.equals(other.staCity))
return false;
return true;
}
}
该联全主键的应用:
@Entity
@Table(name = "AIRLINE")
public class AirLineEntity {
private AirLinePK a_id;
private String a_name;
// 联合主键
@EmbeddedId
public AirLinePK getA_id() {
return a_id;
}
public void setA_id(AirLinePK a_id) {
this.a_id = a_id;
}
@Column(length = 50)
public String getA_name() {
return a_name;
}
public void setA_name(String a_name) {
this.a_name = a_name;
}
}
测试:
public class CompositePKTest {
@Test
public void save(){
EntityManagerFactory factory = Persistence.createEntityManagerFactory("mengya");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
AirLineEntity airLine = new AirLineEntity();
airLine.setA_id(new AirLinePK("BeJing","ShangHai"));
airLine.setA_name("北京至上海");
em.persist(airLine);
em.getTransaction().commit();
em.close();
factory.close();
}
}
分享到:
相关推荐
**JPA联合主键详解** 在Java Persistence API (JPA) 中,主键是用于唯一标识实体的关键字段。在很多情况下,一个实体的主键可能不是由单一字段组成,而是由两个或更多个字段共同构成,这样的主键就被称为联合主键...
### JPA注解实现联合主键 在关系型数据库中,单个字段作为主键的情况较为常见,但在某些场景下,我们需要使用多个字段共同作为主键来唯一标识表中的每一条记录,这就是所谓的“联合主键”。而在Java持久化框架...
**JPA 联合主键详解** 在Java Persistence API(JPA)中,主键是用于唯一标识数据库表中每一行记录的关键字段。在某些情况下,一个实体可能需要多个字段来唯一标识其实例,这时就需要使用联合主键。本篇文章将深入...
本教程将聚焦于JPA中的一个关键概念——联合主键(Composite Key),这是处理多字段主键的一种方式。 联合主键是指在数据库表中,由两个或多个字段共同构成的唯一标识,这些字段的组合必须是唯一的。在JPA中,我们...
在Java Persistence API (JPA) 中,联合主键(Composite Key)是指由两个或更多个字段共同组成的主键,这与单字段主键(Single Field Primary Key)相对。这种设计模式通常用于那些需要多个属性来唯一标识实体的情况...
### 一、JPA 联合主键(Composite Key) 联合主键(Composite Key)是指由两个或更多个属性组成的主键,这些属性共同决定了实体的唯一性。在JPA中,我们可以使用`@IdClass`或`@EmbeddedId`注解来实现联合主键。 1....
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第15讲 JPA中的联合主键.avi
Spring Data JPA 建立表的联合主键 在 Spring Data JPA 中,建立表的联合主键是一种常见的需求,本文将详细介绍如何使用 Spring Data JPA 建立表的联合主键,并提供了两种实现方式。 首先,我们需要了解什么是联合...
在JPA中,**联合主键(Composite Key)** 是指由两个或多个属性共同构成的主键,这与单个属性的简单主键相对。联合主键通常用于那些通过多个字段来唯一标识实体的情况。在关系数据库中,联合主键确保了表中每行数据...
#### 十、JPA联合主键 - **概念介绍**: - 联合主键是指使用多个字段共同组成一个复合主键。 - **应用场景**: - 当单个字段不足以唯一标识一条记录时,可以考虑使用联合主键。 - **实现方式**: - 通过在实体类上...
JPA主键策略详解 JPA(Java Persistence API)是一个Java标准,用于对象关系映射(ORM)。在JPA中,主键策略是指生成主键的机制,用于标识数据库表中的每一行记录。在本文中,我们将详细讨论JPA主键策略的类型、...
在 Java Persistence API(JPA)中,联合主键是指由多个字段组成的主键,可以使用@IdClass注解来实现。在本文中,我们将介绍如何使用@IdClass创建联合主键,并实现外部关联。 首先,我们需要创建三个实体类:...
在Java Hibernate框架中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这在处理一些特定的数据模型时非常有用。本文将详细介绍如何使用Hibernate注解来定义联合主键。 首先,我们需要了解联合...
JPA中的联合主键** 联合主键使用@EmbeddedId和@Embeddable注解,将多个字段组合成一个复合主键,适用于那些不满足单一主键条件的表。 以上就是JPA学习笔记中的关键知识点,涵盖了JPA的基本概念、环境配置、对象...
**联合主键(Composite Primary Key)**在JPA中,当一个实体的主键由两个或更多个字段组成时,我们称之为联合主键。`JPACompositePK`示例将说明如何使用`@Embeddable`和`@EmbeddedId`注解来定义这样的主键。 在这些...
- 通常情况下,还需要指定外键字段(`mappedBy`)或者联合主键(`@PrimaryKeyJoinColumn`)来明确关联关系。 - **一对多关联**: - 使用`@OneToMany`注解表示一对多关系,通常还需要使用`@JoinColumn`或`@JoinTable`来...
8. **继承映射(Inheritance Mapping)**:JPA支持单表继承、联合继承和表格分层等策略,使你可以设计复杂的对象模型。 9. **懒加载(Lazy Loading)**:默认情况下,JPA实现如Hibernate支持懒加载,即关联的对象只...
联合主键(Composite Key)** - 当主键由两个或更多个字段组成时,可以使用`@IdClass`或`@EmbeddedId`来定义。 **7. 异步和缓存** - **异步处理**: 可以结合Java的ExecutorService或Spring的AsyncConfigurer进行...
- **复合主键**:`@EmbeddedId`和`@IdClass`用于处理复杂的主键结构。 - **继承映射**:支持单表继承(Single Table Inheritance)、联合继承(Joined Table Inheritance)和表-per-class-hierarchy策略。 - **...