JPA 2 一对多 - JPA 如何推断列信息?

Posted

技术标签:

【中文标题】JPA 2 一对多 - JPA 如何推断列信息?【英文标题】:JPA 2 one to many - how does JPA infer column information? 【发布时间】:2013-07-24 15:26:20 【问题描述】:

我有一个 JPA2 (Hibernate) 应用程序,它使用一个只有两个表的 mysql 数据库。一张表称为“公司”,另一张表称为“员工”。两张表之间存在一对多的关系(1 家公司有很多员工)。 “employees”表中的外键列称为“company_id”。

在我的 JPA2 应用程序中,我使用以下注释:

在实体类“公司”中我有以下注释

@OneToMany(cascade = CascadeType.ALL)
private Collection<Employee> employees;

在员工类中

@ManyToOne
private Company company;

JPA 如何知道它应该使用哪个列来确定公司的所有员工。注释不包含此信息,但应用程序可以工作。

谢谢

【问题讨论】:

【参考方案1】:

ManyToOne 端缺少可选的JoinColumn 注释,而该注释又具有可选的name 属性,默认为:

以下内容的串联:引用实体或可嵌入类的引用关系属性或字段的名称; “(下划线)”;引用的主键列的名称。如果实体中没有这样的引用关系属性或字段,或者如果连接是针对元素集合的,则连接列名称由以下内容的串联形成:实体名称; “(下划线)”;引用的主键列的名称。

在关系的另一边,OneToMany 边,它缺少 mappedBy 属性(它应该等于拥有关系的字段的名称,在你的例子中是“公司”)。 Javadoc 说除非关系是单向的,否则此属性是必需的,因此您使用的 JPA 实现有可能假设关系是单向的。

【讨论】:

不错!这可以解释为什么我的代码只是开箱即用,而我的代码没有提供任何相关信息。谢谢!

以上是关于JPA 2 一对多 - JPA 如何推断列信息?的主要内容,如果未能解决你的问题,请参考以下文章

JPA中实现单向一对多的关联关系

spring data jpa 一对多查询

JPA的一对多,多对多用法

如何总结一对多关系JPA中每个项目的成本?

JPA 单向一对多关联关系

JPA - 使用 EclipseLink 保持单向一对多关系失败