为什么hibernate为单向OneToMany创建连接表?

mor*_*avi 12 hibernate hibernate-onetomany

为什么hibernate为这些类使用连接表?

@Entity
public class CompanyImpl {
    @OneToMany
    private Set<Flight> flights;


@Entity
public class Flight {
Run Code Online (Sandbox Code Playgroud)

我既不想要连接表也不想要双向关联:(

JB *_*zet 13

因为它是如何设计的,以及JPA规范告诉它如何映射这样的关联.如果要在Flight表中使用连接列,请使用

@Entity
public class CompanyImpl {
    @OneToMany
    @JoinColumn(name = "company_id")
    private Set<Flight> flights;
}
Run Code Online (Sandbox Code Playgroud)

是记录在案的.

  • 原因在于,由于它是单向关联,因此许多方面不知道关联,因此其表不应该有一个列来映射该关联. (4认同)
  • “因为这就是它的设计方式”对我来说似乎根本不是原因,而是事实:P (2认同)
  • 这实际上是一个原因:)谢谢。+1 (2认同)

Olu*_*kan 5

Hibernate 使用关联表来映射关系,而作为多方的另一个表不存在任何表。然后它将创建一个映射器。

该文档指出,使用 @OneToMany 和 @ManyToMany 您可以映射关联实体的集合、列表、映射和集合。

如果您不指定@joincolumn,这是关于您的问题,使用单向一对多连接表。表名是所有者表名、_ 和另一侧表名的串联。引用所有者表的外键名称是所有者表、_ 和所有者主键列名称的串联。

因此,如果您不想使用一对多创建连接表(映射器),则可能必须指定@joinColumn。

@Entity
public class CompanyImpl {
    @OneToMany
     @JoinColumn(name=flights_id)
    private Set<Flight> flights;


@Entity
public class Flight {
Run Code Online (Sandbox Code Playgroud)