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

时间:2012-12-18 21:29:33

标签: hibernate hibernate-onetomany

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

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


@Entity
public class Flight {

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

2 个答案:

答案 0 :(得分:12)

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

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

is documented

答案 1 :(得分:2)

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

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

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

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

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


@Entity
public class Flight {
相关问题