9 mapping one-to-many eclipselink jpa-2.0
可以@OneToMany使用@JoinColumn注释禁用关系连接表.默认为连接表.
例如,生产系统有哪些优缺点?
什么时候应该使用连接表?
谢谢.
Pio*_*cki 19
默认情况下,@OneToMany只有在使用单向关系时才会创建连接表.
换句话说,如果您拥有Employee和Project实体,并且Employee实体定义如下(假设orm.xml这些实体没有条目):
@Entity
public class Employee {
// ...
@OneToMany
Set<Project> projects;
}
@Entity
public class Project {
// ...
}
Run Code Online (Sandbox Code Playgroud)
JPA提供程序将创建一个连接表(注意注释中没有mappedBy属性,@OneToMany因为没有对Employee实体的引用Project).
另一方面,如果您将使用双向关系:
@Entity
public class Employee {
// ...
@OneToMany(mappedBy="employee")
Set<Project> projects;
}
@Entity
public class Project {
// ...
@ManyToOne
Employee employee;
}
Run Code Online (Sandbox Code Playgroud)
将不使用连接表,因为将使用"many"一侧来存储此关系的外键.
但是,即使在@OneToMany与定义mappedBy属性具有双向关系的情况下,也可以强制使用连接表.您可以@JoinTable在关系的拥有方使用注释来实现它.
正如您所提到的,@JoinColumn如果默认使用连接表(单向@OneToMany关系),也有可能使用.
最好为自己测试FK并加入表性能差异.我可以猜测,较少的连接(在这种情况下:FK)似乎有更好的性能.
此外,有时DBA定义数据库模式,您只需要将映射适合现有模式.那你就别无选择FK或加入桌子 - 这就是你有选择的原因.