2010-01-19 137 views
1

我会尽量总结我的问题。休眠继承搜索

我有一个基类“基”与三个属性。四类继承它 - “A”,“B”,“C”和“D”。他们添加自己的附加属性。我用InheritanceType.JOINED映射了这个。现在我想搜索“Base”实体,这意味着我搜索所有“A”,“B”,“C”和“D”实体的公共属性。我知道该怎么做。 Hibernate支持它开箱即用。

但我想有一个功能不是搜索所有类型,而是搜索其中的一部分。例如,有复选框,用户选择搜索“A”和“D”。再次搜索“基础”类的共同三个属性。我是否需要向基类添加额外的列来区分类型并手动填充它?我确信Hibernate有一些开箱即用的功能,但我找不到它。

问候, 斯托

回答

0

我试过我上面写的,它的工作原理。因此,在“基础”实体中添加一个“类型”列以区分孩子。查询是:"from Base where (prop1=:value1) and (prop2=:value2) and (prop3=:value3) and (type in ('1', '4'))"

1

您可以从子句命名的HQL多个实体:

from A,D where prop1=:value 

也许你需要命名的属性where子句seperately(我希望不会,但你”必须尝试它):

from A as aa,D as dd where aa.prop1= :value or dd.prop1= :value 
+0

EJB,谢谢你的回答!我会试一试。但我正在寻找像“从基地where prop1 =:value和TypeOfChilds in(A.class,D.class)。这可能与休眠? – 2010-01-19 09:58:15

+0

不是我知道,对不起。 – EJB 2010-01-19 10:03:28

+0

我试过你的建议,但他们都不适合我,也许我会添加一个额外的列“类型”到基类来区分。因此,查询将如下所示:“from Base where where prop1 =:value and((type = 1 )或(type = 4))“,但我觉得有一个更好的解决方案。 – 2010-01-19 15:57:11