2010-06-17 21 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