Hibernate - 避免在oneToMany关系中创建交叉表

时间:2013-07-20 13:41:22

标签: java hibernate annotations

one to many / many to one双向关系中,为了避免创建交叉表,我要将@mappedBy添加到@ManyToMany,或者我添加{{1}注释。

哪一个最好?

P.S:我知道@JoinColumn用于告诉Hibernate另一个表(@mappedBy)负责更新关系。

1 个答案:

答案 0 :(得分:2)

你很困惑。首先,mappedBy不是注释。它是@OneToOne@OneToMany@ManyToMany注释的属性。

其目的始终相同:当关联是双向关联时,反面必须具有此属性。并且必须有一个反面。在OneToMany关联的情况下,反面必须是一方。

@JoinColumnmappedBy没有多大关系。它在关联的所有者方(或唯一方面,如果关联是单向的)使用,告诉Hibernate关联在数据库中由给定的连接列(或者如果您愿意的话,外键)实现。如果您没有指定JoinColumn,Hibernate将使用默认映射。

您的问题仍然不是很明确,因此我假设您要避免OneToMany单向关联中的默认映射,该关联包括使用连接表。由于它是单向关联,因此mappedBy无关紧要。但是你可以简单地使用JoinColumn来告诉Hibernate它必须使用连接列而不是连接表:

public class Car
    @OneToMany
    @JoinColumn(name = "car_id")
    private Set<Wheel> wheels;
}

请注意,JoinColumn javadocHibernate documentation中记录了这一点。