【问题标题】:avoid relation table in Hibernate's mapping one-to-many(or one-to-many) association into db tables避免 Hibernate 将一对多(或一对多)关联映射到数据库表中的关系表
【发布时间】:2011-07-11 19:26:14
【问题描述】:

我是 Hibernate 的新手。我注意到在 Hibernate 中,将 java 类映射到数据库表通常涉及关系表,甚至有时关系表不是必需的(例如在一对多关系中或相反)。

例如:

我是一个 Company 类和一个 Flight 类,其中一个公司可以有多个航班(从 Company 到 Flight 的一对多关联)。

我有以下使用休眠注释的代码:

@Entity
@Table(name = "COMPANY")
public class Company {

    @Id
    private Long id;

    @OneToMany
    private Set<Flight> flights = new HashSet<Flight>();

    ......
    getter and setter methods
    ......
}



@Entity
@Table(name="FLIGHT")
public class Flight{
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "COMP_ID")
    private Company ownerCompany;

    ......
    getter and setter methods
    ......

}

类已成功映射到数据库。并且一共有三个表,分别是:

  1. 公司(ID 字段)
  2. FLIGHT(一个 ID 字段和一个 COMP_ID 字段)
  3. COMPANY_MANY_TO_ONE_FLIGHT(两个字段:MANY_TO_ONE_COMPANY_id 和 flight_id)

但是最后一张表COMPANY_MANY_TO_ONE_FLIGHT是hibernate添加的关系表,是多余的。

显然FLIGHT表中有外键COMP_ID,去掉冗余关系表是合理的。

我该如何避免这种情况?就像通过修改注解一样。

【问题讨论】:

    标签: hibernate mapping one-to-many many-to-one


    【解决方案1】:

    尝试在@OneToMany 注解中使用 mappedBy 属性:

    @OneToMany(mappedBy="ownerCompany")
    private Set<Flight> flights = new HashSet<Flight>();
    

    您可以在此处查找带有 hibernate 注释的常见关联 mappend: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      相关资源
      最近更新 更多