使用Java Persistence API(JPA)时,通常需要在两个实体之间创建关系。 这些关系是通过使用外键在数据模型(例如数据库)中定义的,而在我们的对象模型(例如Java)中则使用注释来定义关联,以定义关联。 在对象模型中定义关系或关联时,一项常见的任务是识别关系的拥有方。 标识关系中的拥有实体很重要,因为拥有方通常是(如果不是总是)必须在@JoinColumn批注中指定的地方。 为了说明实体拥有方的概念,我们将使用数据模型来支持此讨论。

让我们分析这个简单的模型,该模型描述了两个表POST和SERIES之间的关系。 在这种关系中,POST表存储一个博客帖子,该博客帖子可以是SERIES表代表的一系列帖子的一部分。 在数据模型中,POST表上的SERIES_ID外键将POST与相应的SERIES关联。 此外键指示哪个实体拥有该关系。 让我们在对象模型中添加这些实体,并在它们之间建立简单的单向关系。 一,系列实体:

@Entity
@Table(name="SERIES")
public class Series {@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="SERIES_ID")private Integer seriesId;@Column(name="TITLE")private String title;//Accessors...
}

和Post实体:

@Entity
@Table(name="POST")
public class Post {@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="POST_ID")Integer postId;@Column(name="TITLE")String title;@Column(name="POST_DATE")Date postDate;@ManyToOne@JoinColumn(name="SERIES_ID")private Series series;//Accessors...
}

在Post实体中,在字段系列上方指定@JoinColumn批注,以表示用于标识帖子的各个Series的外键。 @JoinColumn批注放置在Post实体上,因为它是关系中的拥有实体。 通过引用数据模型中的两个实体并标识包含外键的实体来确定实体的拥有方。 如果Post和Series实体之间的关系要求是双向的,则意味着Post实体应该可以从Series进行访问,则关系(Series)的反面必须使用@OneToMany进行注释,并定义了mappingBy元素。 mappingBy元素应指向关系(Post)的拥有方的字段,该字段指定用于关联实体的@JoinColumn。

Series实体的以下重构突出显示了用于建立双向关系的映射:

@Entity
@Table(name="SERIES")
public class Series {@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="SERIES_ID")private Integer seriesId;@Column(name="TITLE")private String title;@OneToMany(mappedBy="series")private List posts = new ArrayList();//Accessors...
}

总之,在JPA持久性单元内定义的关系中确定拥有实体时,重要的是查阅数据模型以查找数据模型中的各个表中哪些实体包含外键。

参考: JPA:在ToThought博客上,由我们的JCG合作伙伴 Kevin Bowersox 确定关系的归属方 。

翻译自: https://www.javacodegeeks.com/2013/04/jpa-determining-the-owning-side-of-a-relationship.html

JPA:确定关系的归属方相关推荐

  1. jpa 关系拥有方_JPA:确定关系的归属方

    jpa 关系拥有方 使用Java Persistence API(JPA)时,通常需要在两个实体之间创建关系. 这些关系是通过使用外键在数据模型(例如数据库)中定义的,而在我们的对象模型(例如Java ...

  2. 5.10.3 操作查询之从包含一对多关系中“一”方的表来删除一方记录和多方表中的相关记录

    删除查询不仅可以在一个表内删除记录,还可以利用多个表之间创建关系时已经设置的"级联删除相关纪录",来一次删除几个表中相关联的所有数据记录.     从相互关联的一个或多个表中删除记 ...

  3. 009_Spring Data JPA一对一关系

    1. 一对一的关联关系 1.1. 人和身份证是一对一的关联关系 人类(对应表名: t_people): 一方 身份证类(对应表名: t_icard): 一方 1.2. 身份证表 1.3. 人类表 2. ...

  4. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...

    前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...

  5. JPA与EJB3的关系

    JPA是基于Java持久化的解决方案,主要是为了解决ORM框架的差异,它的出现在某种程度上能够解决目前ORM框架之间不能够兼容的问题,对开发人员来说,能够更好的在JPA规范下进行系统开发. JPA全称 ...

  6. JDBC,JdbcTemplate,JPA,Hibernate之间的关系概述

    什么是JDBC? Java语言访问数据库的一种规范,是一套API.JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口 ...

  7. JPA, hibernate, jdbcTemplate(建议使用)区别

    Hibernate批量处理海量其实从性能上考虑,它是很不可取的,浪费了很大的内存.从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作.实际使用下来性能非常不理 ...

  8. 终于有人把Spring Data JPA 讲明白了!

    01 什么是JPA? JPA的全称是 Java Persistence API , 中文的字面意思就是Java 的持久层 API , JPA 就是定义了一系列标准,让实体类和数据库中的表建立一个对应的 ...

  9. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

最新文章

  1. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)
  2. 快速幂(二进制,十进制)
  3. SpringBoot+Spring Security验证密码MD5加密
  4. python——函数 10、函数的嵌套
  5. Eigen+suitesparse for windows 安装
  6. 抱歉,请不要把 “业务逻辑层” 理解为 “业务中台”
  7. P2231-[HNOI2002]跳蚤【容斥】
  8. GitHub---最简单的使用
  9. python使用redis_使用Redis和Python构建自行车共享应用
  10. 00-自测3. 数组元素循环右移问题
  11. centos6 revive-adserver
  12. Java的反射 基础+简单复制对象实例
  13. Nessus最新版8.15安装教程
  14. php 英文转中文,php如何将英文引号转换为中文引号
  15. RGB-D相机(Azure Kinect DK)RGB图、深度图的获取,配准与保存
  16. OpenStreetMap初探(一)——了解OpenStreetMap
  17. MES系统之设备管理的基础功能
  18. 多文件自平衡云传输 (六)番外篇 —————— 开开开山怪
  19. Linux 文件锁的原理、实现和应用
  20. 设置计算机网络密码怎么设置路由器,如何在计算机上设置路由器密码?

热门文章

  1. 全局配置_配置全局异常处理,结果没有想到,spring boot实践(3)
  2. Linux ss 热点,在Linux系统下的ss命令(socket statistics)各种使用示例
  3. java线程同步——竞争条件的荔枝+锁对象
  4. 使用SpringBoot搭建一个简单的webSocket服务
  5. Sprng boot(十三):Spring boot 小技巧
  6. camel apache_短款Apache Camel K
  7. cassandra_Spring Boot Cassandra的第一步
  8. sql limit 子句_Java 8流中的常见SQL子句及其等效项
  9. byteman_Byteman –用于字节码操纵的瑞士军刀
  10. javafx 和swing_Swing和JavaFX:使用JFXPanel