在one to many
/ many to one
双向关系中,为了避免创建交叉表,我要将@mappedBy
添加到@ManyToMany
,或者我添加{{1}注释。
哪一个最好?
P.S:我知道@JoinColumn
用于告诉Hibernate另一个表(@mappedBy
)负责更新关系。
答案 0 :(得分:2)
mappedBy
不是注释。它是@OneToOne
,@OneToMany
和@ManyToMany
注释的属性。
其目的始终相同:当关联是双向关联时,反面必须具有此属性。并且必须有一个反面。在OneToMany关联的情况下,反面必须是一方。
@JoinColumn
与mappedBy
没有多大关系。它在关联的所有者方(或唯一方面,如果关联是单向的)使用,告诉Hibernate关联在数据库中由给定的连接列(或者如果您愿意的话,外键)实现。如果您没有指定JoinColumn,Hibernate将使用默认映射。
您的问题仍然不是很明确,因此我假设您要避免OneToMany单向关联中的默认映射,该关联包括使用连接表。由于它是单向关联,因此mappedBy无关紧要。但是你可以简单地使用JoinColumn来告诉Hibernate它必须使用连接列而不是连接表:
public class Car
@OneToMany
@JoinColumn(name = "car_id")
private Set<Wheel> wheels;
}
请注意,JoinColumn javadoc和Hibernate documentation中记录了这一点。