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 如何推断列信息?的主要内容,如果未能解决你的问题,请参考以下文章