一对一(One-To-One)
使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。
1.共享主键的一对一关联映射:
@Entity
@Table(name="Test_Body")
public class Body {
private Integer id;
private Heart heart;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}
public void setHeart(Heart heart) {
this.heart = heart;
}
}
@Entity
@Table(name="Test_Heart")
public class Heart {
private Integer id;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
通过@PrimaryKeyJoinColumn批注定义了一对一关联
2.使用外键进行实体一对一关联:
@Entity
@Table(name="Test_Trousers")
public class Trousers {
@Id
public Integer id;
@OneToOne
@JoinColumn(name = "zip_id")
public TrousersZip zip;
}
@Entity
@Table(name="Test_TrousersZip")
public class TrousersZip {
@Id
public Integer id;
@OneToOne(mappedBy = "zip")
public Trousers trousers;
}
上面的例子是指Trousers通过Trousers的外键列zip_id和TrousersZip关联,@JoinColumn批注定义了联接列,该批注和@Column批注有点类似,但是多了一个名为referencedColumnName的参数。该参数定义了所关联目标实体中的联接列,注意,当referencedColumnName关联到非主键列的时候,关联的目标类必须实现Serializable,还要注意的是所映像的属性对应单个列(否则映射无效)
一对一关联可能是双向的,在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向主体的关联属性。例子中,mappedBy的值为zip。最后,不必也不能再在被关联端(ownedside)定义联接列了,因为已经在主体端声明了。
如果在主体没有声明@JoinColumn,系统自动进行处理:在主表(owner table)中将创建联接列,列名为:主体的关联属性名+下划线+被关联端的主键列名。上面的例子中是zip_id,因为Trousers中的关联属性名为zip,TrousersZip的主键是id。
3.通过关联表定义一对一关联
@Entity
@Table(name="Test_People")
public class People {
@Id
public Integer id;
@OneToOne
@JoinTable(name ="TestPeoplePassports",
joinColumns = @JoinColumn(name="perple_fk"),
inverseJoinColumns = @JoinColumn(name="passport_fk")
)
public Passport passport;
}
@Entity
@Table(name="Test_Passport")
public class Passport {
@Id
public Integer id;
@OneToOne(mappedBy = "passport")
public People people;
}
People通过名为TestPeoplePassports的关联表和Passport关联。该关联表拥有名为passport_fk的外键列,该外键指向Passport表,该信息定义为inverseJoinColoumns的属性值,而people_fk外键列指向People表,该信息定义为joinColumns的属性值。
这种关联可能是双向的,在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向主体的关联属性。例子中,mappedBy的值为passport。最后,不必也不能再在被关联端(ownedside)定义联接列了,因为已经在主体端声明了。
分享到:
相关推荐
在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库...这就是JPA中一对一关系的基本配置和使用方式。在实际开发中,根据项目需求,你可能还需要考虑懒加载、fetch策略、级联操作等方面的优化和调整。
**概念**:一对一关系意味着两个实体之间存在唯一的关联,一个实体实例对应另一个实体的唯一实例。在数据库中,这通常通过外键约束实现。 **配置方式**: - 使用`@OneToOne`注解在实体类的属性上表示一对一关系。 -...
本篇文章将聚焦于JPA中的一对一(OneToOne)关联映射的实例配置,这在处理两个实体之间一对一关系时非常有用。 在一对一关联中,一个实体对应另一个实体的唯一实例。这种关系可以通过在实体类中定义注解来实现。JPA...
**JPA一对多和多对一关系详解** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式来操作数据库。在JPA中,实体间的关系映射是核心概念之一,...
在Java Persistence API (JPA) 中,一对一双向关联是一种关系映射,它允许两个实体类之间存在一对一的关系,并且每个实体都能引用对方。这种关联是双向的,意味着每个实体都可以通过自己的属性访问到另一个实体。...
该测试涵盖了人员表和身份证表之间的一对一关系,使用了 JPA 的注解来定义实体类和关系。 实体类设计 在该测试中,我们定义了两个实体类:Person 和 IdCard。Person 类代表人员信息,包括人员 ID、姓名和身份证...
例如,一个用户实体可能有一个唯一的个人资料实体,它们之间是一对一关系。 2. **一对多关系(OneToMany)**: 一个实体可以与多个其他实体相关联,这在现实世界中很常见。使用@OneToMany注解来定义这种关系,通常...
一对一关系是指两个实体之间的关系,其中一个实体只能与另一个实体关联。在 JPA 中,使用 `@OneToOne` 注解来定义这种关系,并通过 `@JoinColumn` 注解指定关联字段。 **示例代码:** ```java @OneToOne @...
一、JPA一对多关系 在数据库中,一对多关系意味着一个实体可以与多个其他实体关联。例如,一个学生可以属于多个班级(多对一),而一个班级可以包含多个学生(一对多)。在JPA中,我们通过在实体类上使用`@...
**JPA 2 一对多双向关联关系** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式操作数据库。在JPA中,一对多关联关系是常见的实体间关系类型...
对于学生到老师的映射,每个学生可以有一个导师,这是多对一关系。在`Student`类中,我们可以定义一个`Teacher`类型的字段,并使用`@ManyToOne`注解来表示。同时,还需要在`Teacher`类中添加一个`List<Student>`...
本资料主要探讨的是JPA中的一对多关系以及延迟加载机制,这两部分是JPA使用中的关键概念。 **一对多关系** 在关系数据库中,一对多关系是最常见的一种关联类型。例如,一个部门可以有多名员工,而每个员工只能属于...
在这个例子中,`User`实体和`Profile`实体之间存在一对一关系。`@OneToOne`注解在`Profile`的`user`属性上,`mappedBy`属性指定了反向关联的属性名,即`User`实体的`profile`属性。同时,`User`实体中的`profile`...
双向一对一关系意味着两个实体都包含对彼此的引用。每个实体都有一个指向对方的属性,并使用`@OneToOne`注解。在定义双向关系时,需要确保一个实体的`mappedBy`属性引用了另一个实体的属性名。 3. **单向一对多**...
本示例中的“JPA多对多Demo”是一个具体的实践案例,展示了如何在JPA中实现多对多关联关系,以及对应的增删改查方法。 多对多关联是现实世界中常见的一种关系类型,例如教师和学生之间的关系,一个教师可以教多个...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...
**Hibernate** 是一个流行的开源ORM框架,它提供了对JPA标准的支持。实际上,Hibernate可以被视为JPA的一种实现。Hibernate的主要特点包括: 1. **强大的ORM支持**:Hibernate提供了丰富的功能来支持对象-关系映射...
如示例代码所示,`Person`实体与`Address`实体之间的一对一关系是通过`@OneToOne`注解来实现的。`cascade`属性用于控制关联实体的级联行为,`optional`属性表示该关系是否可以为null。 - **一对多(One-to-Many)...
Java 持久化 API(Java Persistence API),简称 JPA,是 Java 平台上的一个标准,用于管理关系数据库中的数据。JPA 提供了一种面向对象的方式来操作数据库,使得开发人员可以使用 Java 对象来直接操作数据,而无需...
为了方便广大开发朋友的需要特整理一下有关jpa映射关系,希望可以帮助到一些朋友。