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

时间:2013-07-24 15:26:21

标签: jpa jpa-2.0 jpa-2.1

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

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

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

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

并在班级员工

@ManyToOne
private Company company;

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

谢谢

1 个答案:

答案 0 :(得分:2)

ManyToOne方缺少可选的JoinColumn注释,而注释的可选name属性默认为:

  

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

在关系的另一边,OneToMany方面,它缺少mappedBy属性(它应该等于拥有关系的字段的名称,在你的情况下是“公司”) )。 Javadoc说除非关系是单向的,否则这个属性是必需的,所以你正在使用的JPA实现假设关系是单向的。