`
haojinghua
  • 浏览: 54319 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JPA一对一关系

    博客分类:
  • JAVA
阅读更多
一对一(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)定义联接列了,因为已经在主体端声明了。
分享到:
评论

相关推荐

    JPA一对一关系实例配置

    在Java世界中,Java Persistence API (JPA) 是一种用于管理关系数据库...这就是JPA中一对一关系的基本配置和使用方式。在实际开发中,根据项目需求,你可能还需要考虑懒加载、fetch策略、级联操作等方面的优化和调整。

    JPA一对一,一对多,多对多关系映射

    **概念**:一对一关系意味着两个实体之间存在唯一的关联,一个实体实例对应另一个实体的唯一实例。在数据库中,这通常通过外键约束实现。 **配置方式**: - 使用`@OneToOne`注解在实体类的属性上表示一对一关系。 -...

    JPA 一对一实例配置

    本篇文章将聚焦于JPA中的一对一(OneToOne)关联映射的实例配置,这在处理两个实体之间一对一关系时非常有用。 在一对一关联中,一个实体对应另一个实体的唯一实例。这种关系可以通过在实体类中定义注解来实现。JPA...

    JPA一对多和多对一关系

    **JPA一对多和多对一关系详解** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式来操作数据库。在JPA中,实体间的关系映射是核心概念之一,...

    JPA中的一对一双向关联

    在Java Persistence API (JPA) 中,一对一双向关联是一种关系映射,它允许两个实体类之间存在一对一的关系,并且每个实体都能引用对方。这种关联是双向的,意味着每个实体都可以通过自己的属性访问到另一个实体。...

    基于jpa的一对一的主键测试.docx

    该测试涵盖了人员表和身份证表之间的一对一关系,使用了 JPA 的注解来定义实体类和关系。 实体类设计 在该测试中,我们定义了两个实体类:Person 和 IdCard。Person 类代表人员信息,包括人员 ID、姓名和身份证...

    JPA常用关系实现例子

    例如,一个用户实体可能有一个唯一的个人资料实体,它们之间是一对一关系。 2. **一对多关系(OneToMany)**: 一个实体可以与多个其他实体相关联,这在现实世界中很常见。使用@OneToMany注解来定义这种关系,通常...

    JPA映射关系详解javax JPA JPA映射关系 JPA映射

    一对一关系是指两个实体之间的关系,其中一个实体只能与另一个实体关联。在 JPA 中,使用 `@OneToOne` 注解来定义这种关系,并通过 `@JoinColumn` 注解指定关联字段。 **示例代码:** ```java @OneToOne @...

    11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护

    一、JPA一对多关系 在数据库中,一对多关系意味着一个实体可以与多个其他实体关联。例如,一个学生可以属于多个班级(多对一),而一个班级可以包含多个学生(一对多)。在JPA中,我们通过在实体类上使用`@...

    JPA_2_一对多双向关联关系

    **JPA 2 一对多双向关联关系** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式操作数据库。在JPA中,一对多关联关系是常见的实体间关系类型...

    Hibernate annotation JPA 一对多,多对多

    对于学生到老师的映射,每个学生可以有一个导师,这是多对一关系。在`Student`类中,我们可以定义一个`Teacher`类型的字段,并使用`@ManyToOne`注解来表示。同时,还需要在`Teacher`类中添加一个`List<Student>`...

    11_JPA详解_JPA中的一对多延迟加载与关系维护.zip

    本资料主要探讨的是JPA中的一对多关系以及延迟加载机制,这两部分是JPA使用中的关键概念。 **一对多关系** 在关系数据库中,一对多关系是最常见的一种关联类型。例如,一个部门可以有多名员工,而每个员工只能属于...

    JPA_3_一对一关联关系源码

    在这个例子中,`User`实体和`Profile`实体之间存在一对一关系。`@OneToOne`注解在`Profile`的`user`属性上,`mappedBy`属性指定了反向关联的属性名,即`User`实体的`profile`属性。同时,`User`实体中的`profile`...

    jpa的实体映射关系7种

    双向一对一关系意味着两个实体都包含对彼此的引用。每个实体都有一个指向对方的属性,并使用`@OneToOne`注解。在定义双向关系时,需要确保一个实体的`mappedBy`属性引用了另一个实体的属性名。 3. **单向一对多**...

    JPA多对多Demo

    本示例中的“JPA多对多Demo”是一个具体的实践案例,展示了如何在JPA中实现多对多关联关系,以及对应的增删改查方法。 多对多关联是现实世界中常见的一种关系类型,例如教师和学生之间的关系,一个教师可以教多个...

    jpa例子jpajpa

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...

    JPA和Hibernate的关系

    **Hibernate** 是一个流行的开源ORM框架,它提供了对JPA标准的支持。实际上,Hibernate可以被视为JPA的一种实现。Hibernate的主要特点包括: 1. **强大的ORM支持**:Hibernate提供了丰富的功能来支持对象-关系映射...

    JPA

    如示例代码所示,`Person`实体与`Address`实体之间的一对一关系是通过`@OneToOne`注解来实现的。`cascade`属性用于控制关联实体的级联行为,`optional`属性表示该关系是否可以为null。 - **一对多(One-to-Many)...

    JPA (一)

    Java 持久化 API(Java Persistence API),简称 JPA,是 Java 平台上的一个标准,用于管理关系数据库中的数据。JPA 提供了一种面向对象的方式来操作数据库,使得开发人员可以使用 Java 对象来直接操作数据,而无需...

    JPA一对多映射关系解析

    为了方便广大开发朋友的需要特整理一下有关jpa映射关系,希望可以帮助到一些朋友。

Global site tag (gtag.js) - Google Analytics