2010-06-17 52 views
0

我有一個對象'Response',它有一個名爲'submitter'的屬性。提交者可以是幾個不同的類別之一,包括學生,老師等...在Hibernate Criteria查詢中限制關聯的類

我希望能夠執行一個標準查詢,我只選擇教師提交的答案 - 所以這意味着對類別進行限制關聯實體。對此有何想法?我想遠離直接的SQL或HQL。

回答

0

我結束了使用本機SQL。不是最大的,但它並不可怕之一:

Criteria c = session.createCriteria(Response.class); 
c.createCriteria("submitter").add(Restrictions.sqlRestriction("{alias}.person_type='student'")); 

值得一提的,這不僅是因爲我用的是表每繼承層次結構映射策略奏效。沒有這一點,我不會有一個鑑別器列。

2

According to Gavin King,與HQL以下工作:

where foo.class in (...) 

你試過

c.createCriteria("submitter").add(Restrictions.eq("class", Teacher.class)) 

+0

是的,我試過你的第二個以及不太優雅的c.createCriteria(「submitter」)。add(Restrictions.in(「class」,new Class [] {CommunityHealthWorker.class}));'只是因爲加文說「在哪裏foo.class」 – DLaw 2010-06-17 21:01:44

+0

而且它工作?哦,Gavin可能使用'in'而不是'eq',因爲instanceof也接受子類型,但eq沒有。因此,如果教師是抽象的,並且是RegularTeacher或者SubstituteTeacher,則需要在(RegularTeacher.class,SubstituteTeacher.class)'中表示'teacherof Teacher'。 – meriton 2010-06-17 23:26:11