【问题标题】:Mixing table per subclass and per hierarchy in hibernate休眠中每个子类和每个层次结构的混合表
【发布时间】:2011-02-20 06:54:18
【问题描述】:

在我的数据库中有两个三个表。第一个表 ABSTRACT 包含三列

id, type, someText

此表包含抽象类abstract 的所有抽象信息。现在两个表 CONCRETEONECONCRETETWO 包含具体类 concreteOneconcreteTwo 的所有信息。现在我知道我可以使用休眠中的每个子类策略的表来创建具有继承的映射。但是,由于我有一列标记了具体实现的类型,是否可以创建一些混合行为,例如带有鉴别器的每个子类策略的表?

【问题讨论】:

  • 为什么需要判别器?你为什么不使用简单的“每个子类的表”?
  • 也许这可以降低性能开销,因为理论上可以在查询抽象类时避免外连接。

标签: hibernate inheritance subclass


【解决方案1】:

应根据数据库设计选择Hibernate继承映射策略。

如果你不能改变数据库设计,那么坚持当前数据库设计的最佳策略。即每个子类策略的表。

如果您可以更改数据库设计,请先忘记 Hibernate,重点关注哪种 DB 表设计更适合您的应用程序。 需要考虑的一些因素, a) 如何获取/使用数据? 可以说,如果大多数时候,逻辑不关心区分 CONCRETEONE 和 CONCRETEWO,那么就没有必要使用子表了。 b) CONCRETEONE 和 CONCRETEWO 需要多少附加列? 如果您有这么多特定于子表的列,那么“每个类层次结构的表”不是一个好主意。 c) 特定于子表的列不应为“NOT-NULL”。

希望这会有所帮助。

【讨论】:

  • a) 也许你是对的,我想查询抽象类 b) 很多其他列的情况很少发生,因此我问 c) 好吧,我看看 javalobby.org/java/forums/t18300.html ,也许这对我有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
相关资源
最近更新 更多