【问题标题】:Union on Table Per Class Hierarchy每个类层次结构的表上的联合
【发布时间】:2014-03-28 10:37:05
【问题描述】:

我正在处理一个需求。目前有一个搜索页面,其中包含值列表框(示例数据)1)员工和 2)体育人。
对象层次结构(休眠 Bean) Person 是具有两个不同类的实际对象 1) 员工和 2) 基于运动人 鉴别器列
Person_Type(鉴别器列)。

在搜索页面上,如果用户选择任何一个列表框,将产生来自该子类的数据。

现在要求将两个子类结果一起显示,通过在列表框中再添加一个值“员工+体育人”来完成。

问题的 1)两个子类具有不同的结构 2) 还有其他标准可以与不同的属性进行比较。

如何合并这两个子类。 请帮我解决。 请注意:我正在尝试不使用基于查询的联合。我认为在 OOPS 方面

【问题讨论】:

  • 我不太明白您的问题:您有一个包含员工和运动员的列表,需要根据不同的标准对该列表进行排序?
  • @Thomas,我想我混合了 UI 和 Hibernate Object Hierarchy。列表框是具有两个值的 UI 元素。基于选择,DAO 在子类上运行。列表框中的值是 Person_Type,它是一个鉴别器值。

标签: java hibernate hibernate-mapping


【解决方案1】:

加载这两种类型的人应该不是问题。如果您的查询可以访问常用属性,您可以使用FROM Person p WHERE <whatever_person_criteria_you_have>

如果您的查询需要使用EmployeeSportsPerson 的特定属性,那么您可以执行2 个查询并将结果放入一个List<Person>

排序/显示该列表取决于需要显示或比较的数据。如果您必须比较不同的数据,您始终可以使用 Comparator<Person> 检查对象的实际类,也可以使用包装器来访问正确的显示属性。

【讨论】:

  • 我执行了两次查询以获得结果,因为标准特定于子类。但是我的老板真的一击就问我......或者使用原生查询(我不同意)
  • @Kumar 我会问你的老板为什么你必须使用两个查询。我更喜欢使用两个简单的查询而不是一个更复杂的查询,特别是如果你不得不回退到本机 sql (我也不同意 ;) )。如果单个查询变得过于复杂,多个查询无法获得相同的结果,除了更易于维护之外,甚至可能会产生更好的性能。
  • 是的,你是对的。我刚告诉他,但你知道老板永远是对的 :-)。但实际上你的选择是正确的。
  • 补充以上一点,我认为Hibernate不得不考虑提供Union。希望这是 [issues.jboss.org/browse/JBIDE-8666] 问题将很快得到解决
  • @Kumar 好像已经在 3 年前修复了 :)
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多