我有一個對象'Response',它有一個名爲'submitter'的屬性。提交者可以是幾個不同的類別之一,包括學生,老師等...在Hibernate Criteria查詢中限制關聯的類
我希望能夠執行一個標準查詢,我只選擇教師提交的答案 - 所以這意味着對類別進行限制關聯實體。對此有何想法?我想遠離直接的SQL或HQL。
我有一個對象'Response',它有一個名爲'submitter'的屬性。提交者可以是幾個不同的類別之一,包括學生,老師等...在Hibernate Criteria查詢中限制關聯的類
我希望能夠執行一個標準查詢,我只選擇教師提交的答案 - 所以這意味着對類別進行限制關聯實體。對此有何想法?我想遠離直接的SQL或HQL。
我結束了使用本機SQL。不是最大的,但它並不可怕之一:
Criteria c = session.createCriteria(Response.class);
c.createCriteria("submitter").add(Restrictions.sqlRestriction("{alias}.person_type='student'"));
值得一提的,這不僅是因爲我用的是表每繼承層次結構映射策略奏效。沒有這一點,我不會有一個鑑別器列。
According to Gavin King,與HQL以下工作:
where foo.class in (...)
你試過
c.createCriteria("submitter").add(Restrictions.eq("class", Teacher.class))
?
是的,我試過你的第二個以及不太優雅的c.createCriteria(「submitter」)。add(Restrictions.in(「class」,new Class [] {CommunityHealthWorker.class}));'只是因爲加文說「在哪裏foo.class」 – DLaw 2010-06-17 21:01:44
而且它工作?哦,Gavin可能使用'in'而不是'eq',因爲instanceof也接受子類型,但eq沒有。因此,如果教師是抽象的,並且是RegularTeacher或者SubstituteTeacher,則需要在(RegularTeacher.class,SubstituteTeacher.class)'中表示'teacherof Teacher'。 – meriton 2010-06-17 23:26:11