17

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

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


@Entity
public class Flight {

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

4

3 回答 3

17

因为这就是它的设计方式,以及 JPA 规范告诉它映射这种关联的方式。如果您想在 Flight 表中添加一个连接列,请使用

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

是记录在案的

于 2012-12-18T21:35:16.410 回答
5

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

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

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

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

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


@Entity
public class Flight {
于 2018-08-12T16:09:10.693 回答
1

我认为上面给出的答案不够详尽,所以我希望这会有所帮助

原因。为什么 Hibernate 创建一个连接表。

Hibernate 为单向 OneToMany 创建了一个 Join Table,因为通过实现,外键总是保存在多端。因此,在您的示例中,外键将保留在 Flight 表端,从而防止在 Hibernate 选择创建 JoinTable 的多端具有空值。

以你为例,

每个 Flight 都会有一个 CompanyImpl 列,如果没有设置,它必须为 null,因此为了避免在某些 Flight 记录中出现 null,Hibernate 选择有一个 JoinTable 来存储 Flight 和 CompanyImpl 的 Id。

于 2021-11-07T02:59:48.210 回答