我有一个JPA2(Hibernate)应用程序,它使用只有两个表的MySQL数据库。一个表称为“公司”,另一个表称为“员工”。在两个表之间存在一对多的关系(一家公司有很多员工)。表“employees”中的外键列称为“company_id”。
在我的JPA2应用程序中,我使用以下注释:
在实体类“公司”中,我有以下注释
@OneToMany(cascade = CascadeType.ALL)
private Collection<Employee> employees;
并在班级员工
中@ManyToOne
private Company company;
JPA如何知道应该使用哪一列来确定公司的所有员工。注释不包含此信息,但应用程序可以正常工作。
谢谢
答案 0 :(得分:2)
ManyToOne
方缺少可选的JoinColumn
注释,而注释的可选name
属性默认为:
以下内容的串联:引用关系属性的名称或引用实体或可嵌入类的字段; “(下划线)”;引用的主键列的名称。如果实体中没有此类引用关系属性或字段,或者连接是用于元素集合,则连接列名称将形成为以下内容的串联:实体的名称; “(下划线)”;引用的主键列的名称。
在关系的另一边,OneToMany
方面,它缺少mappedBy
属性(它应该等于拥有关系的字段的名称,在你的情况下是“公司”) )。 Javadoc说除非关系是单向的,否则这个属性是必需的,所以你正在使用的JPA实现假设关系是单向的。