避免Hibernate映射到db表中的一对多(或一对多)关联中的关系表

时间:2011-07-11 10:56:21

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

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

例如:

我是公司级和飞行班,公司可以有多个航班(从公司到航班的一对多协会)。

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

@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. COMPANY(ID字段)
  2. FLIGHT(ID字段和COMP_ID字段)
  3. COMPANY_MANY_TO_ONE_FLIGHT(两个字段:MANY_TO_ONE_COMPANY_id和flights_id)
  4. 但是,最后一个表COMPANY_MANY_TO_ONE_FLIGHT是由hibernate添加的关系表,这是多余的。

    显然,FLIGHT表中有一个外键COMP_ID,合理删除冗余关系表。

    我怎样才能避免这种情况?就像通过修改注释一样。

1 个答案:

答案 0 :(得分:2)

尝试使用@OneToMany注释中的mappedBy属性:

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

你可以在这里找到与hibernate注释相关的常见关联: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association