2010-01-19 208 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