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

为什么hibernate为单向OneToMany创建联接表?,hibernate,hibernate-onetomany,Hibernate,Hibernate Onetomany,为什么hibernate对这些类使用联接表 @Entity public class CompanyImpl { @OneToMany private Set<Flight> flights; @Entity public class Flight { @实体 公共类公司{ @独身癖 私人航班; @实体 公务舱航班{ 我既不想要联接表,也不想要双向关联:(,因为它就是这样设计的,JPA规范告诉它映射这样一个关联。如果你想要在飞行表中有联接列,请使用 @Enti

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

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


@Entity
public class Flight {
@实体
公共类公司{
@独身癖
私人航班;
@实体
公务舱航班{

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

,因为它就是这样设计的,JPA规范告诉它映射这样一个关联。如果你想要在飞行表中有联接列,请使用

@Entity
public class CompanyImpl {
    @OneToMany
    @JoinColumn(name = "company_id")
    private Set<Flight> flights;
}
@实体
公共类公司{
@独身癖
@JoinColumn(name=“公司id”)
私人航班;
}

这。

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

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

如果未指定@joincolumn,这是关于您的问题,将使用单向一对多连接表。表名是所有者表名u和另一侧表名的串联。引用所有者表的外键名是所有者表u和所有者主键列的串联(s) 名字

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

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


@Entity
public class Flight {
@实体
公共类公司{
@独身癖
@JoinColumn(名称=航班号)
私人航班;
@实体
公务舱航班{

“因为它就是这样设计的”对我来说似乎根本不是一个理由,而是一个事实:p原因是,由于它是一个单向关联,多方不知道该关联,因此它的表不应该有一个列来映射该关联。这实际上是一个原因:)谢谢+1@jbnizet我对你在评论部分给出的理由不满意。因为如果另一方不知道关联,一个表不应该有映射列,你会如何证明这一点?因为单向反向是可能的,即多对一。那么你的陈述如何证明单向反向是不可能的呢e、 我认为原因是不可能在单侧表中维护多侧表的外键。这在逻辑上和实际上都是不可能的,所以他们去创建一个新的联接表。我对吗?如果错了,请纠正我。