【问题标题】:Hibernate unidirectional one to many association - why is a join table better?Hibernate 单向一对多关联 - 为什么连接表更好?
【发布时间】:2009-08-20 16:03:32
【问题描述】:

在本文档中(向下滚动到单向部分):

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

它表示与连接表的单向一对多关联比仅在拥有的实体中使用外键列更可取。我的问题是,为什么它更受欢迎?

【问题讨论】:

标签: hibernate one-to-many foreign-keys associations


【解决方案1】:

考虑拥有的实体类型也可以由另一个父实体类型拥有的情况。您是否将外键引用放在两个父表的拥有表中?如果你有三种父母类型怎么办?它只是无法扩展到大型设计。

连接表将连接解耦,因此拥有的表不知道父表,从而允许设计优雅地扩展。

【讨论】:

【解决方案2】:

如果子实体只有一个父类型,则不需要连接表。 我已经使用 JPA 完成了此操作(使用休眠 impl。)。

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

缺点: 从 OO 的角度来看,在 child 和 parent 之间引入了额外的依赖关系。实际上,这可能没什么大不了的,因为这种关系在孩子身上是私密的。

例如 家长: @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) @MapKey(name = "name") 私人地图儿童; 孩子: @ManyToOne(可选=假) 私人父母父母;

【讨论】:

  • 你能详细说明一下缺点吗
  • 请注意,在 JPA 2.0 中,不再需要子代对父代的引用。只需在父级上使用@JoinColumn 注释即可。
  • @EdyBourne - 你知道哪个版本的 Hibernate 添加了对此的支持吗?
猜你喜欢
  • 2012-12-06
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2015-01-26
相关资源
最近更新 更多