`
haojinghua
  • 浏览: 51692 次
  • 性别: 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一对一关系实例配置

    NULL 博文链接:https://profound-accumulation.iteye.com/blog/2241894

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

    JPA一对一,一对多,多对多关系映射,面向对象领域

    JPA常用关系实现例子

    JPA常用关系实现例子:一对一,一对多,多对一,多对多关系实现代码。

    JPA一对多和多对一关系

    NULL 博文链接:https://taoistwar.iteye.com/blog/388916

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

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

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

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

    尚硅谷JPA视频教程

    JPA视频_映射双向一对一的关联关系 · 16. JPA视频_映射双向多对多的关联关系 · 17. JPA视频_二级缓存 · 18. JPA视频_JPQL_HelloWorld · 19. JPA视频_JPQL_查询缓存 · 20. JPA视频_JPQL_ORDER BY 和 GROUP...

    JPA一对多映射关系解析

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

    JPA_2_一对多双向关联关系

    这是本人观看传智的视频,整理出来的完整的源码,及学习步骤,学了总会忘记,方便今后复习。代码可以直接运行,jar包完整,资源较大,分几块分享(1-5,按照学习步骤写的)。

    JPA-4 映射关联关系

    映射单向多对一、单向一对多、双向一对一、双向多对一和双向多对多关联关系的具体实现

    jpa的实体映射关系7种

    单向一对一 双向一对一 单向一对多 双向一对多 双向多对一 单向多对多 双向多对多

    Spring+JPA(hibernate)整合 一对多及继承关系配置

    NULL 博文链接:https://prowl.iteye.com/blog/519618

    JPA_学习过程整理

    最近比较清闲,终于有空好好把传智的jpa视频整理了一些,因为每次复习都看视频比较麻烦,索性自己整理一份文档,方便查看。 针对jpa入门级概念做了解释; 有一些基本的增删改查例子,及...重点学习一对多,多对多关系;

    OpenJPA 2.2.1 API (CHM格式)

     除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加简单,减少开发者的工作量,包括允许数据远程传输/离线处理、数据库/对象视图统一工具、使用缓存(Cache)提升企业应用...

    JPA_3_一对一关联关系源码

    这是本人观看传智的视频,整理出来的完整的源码,及学习步骤,学了总会忘记,方便今后复习。代码可以直接运行,jar包完整,资源较大,分几块分享(1-5,按照学习步骤写的)。

    hibernate的中所有关系映射(分别用xml和jpa实现)

    hibernate的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。

    Pro JPA 2 Mastering the Java Persistence API free down

    JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...

    JPA、hibernate项目常用包

    现在引入了一组全新的 API:Java Persistence API JPA 以允许开发者管理 Java EE(甚至 SE)应用程序中的关系数据 另外 Sun 声称 Java Persistence API 表现了一些 Hibernate TopLink(二者都会在稍后讨论) JDO ...

    第25章_JPA概述.

    29.1主键生成策略 ...29.4 一对一关系的配置和使用 29.5 多对一和一对多关系的配置和使用 29.6 多对多的关系 29.7 把查询的多个值封装成对象 29.8 批量更新和删除 29.9 使用存储过程 29.10 实体生命周期回调方法

    ejb3.0 jpa

    JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,图 1很好地描述了JPA的结构: Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久...

Global site tag (gtag.js) - Google Analytics