我有一个对象'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