2009-08-20 57 views
30

在这个文件(向下滚动到单向节):Hibernate单向一对多关联 - 为什么连接表更好?

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-association-collections

它说,有一个连接表单向的一对多关联是只使用了一个外键列更喜欢国有实体。我的问题是,为什么它更受欢迎?

+0

看到http://stackoverflow.com/questions/2092611/why-is-it-recommended-to-avoid-unidirectional-one-to-many-association-on-a-forei – 2012-10-23 11:30:47

回答

36

考虑所拥有的实体类型也可以由另一个父实体类型拥有的情况。你把拥有的表中的外键引用放到两个父表中吗?如果你有三种父类型呢?它只是不能扩展到大型设计。

连接表将连接解耦,以便拥有的表不知道父表的含义,从而允许设计优雅地缩放。

+1

看到区别内部SQL操作在连接表和外键中调用http://stackoverflow.com/q/18333198/418439 – 2013-08-22 02:20:06

11

如果子实体只有一个父类型,则不需要连接表。 我用JPA做过这个(带有hibernate impl。)。

优点: 少一个表。 也许性能更好。 不是“这张桌子是干什么的?”输入问题。

缺点: 从OO的角度来看,引入了child和parent之间的附加依赖关系。在实践中,这可能不是什么大不了的事情,因为这种关系在小孩中是私密的。

 
e.g. 
parent: 
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) 
@MapKey(name = "name") 
private Map children; 

child: 
@ManyToOne(optional = false) 
private Parent parent; 
+0

你能否详细说明这个劣势 – 2011-02-01 13:40:01

+0

精益劣势。 – Conor 2011-02-15 17:04:01

+0

请注意,使用JPA 2.0时,不再需要将子对象引用给父对象。只需在父级上使用@JoinColumn注释。 – 2014-10-26 19:18:53

相关问题