【问题标题】:Restrict the class of an association in a Hibernate Criteria query在 Hibernate Criteria 查询中限制关联的类
【发布时间】:2010-06-17 13:46:01
【问题描述】:

我有一个对象“响应”,它有一个名为“提交者”的属性。提交者可以是几个不同的班级之一,包括学生、教师等......

我希望能够执行一个条件查询,其中我只选择教师提交的回复 - 所以这意味着对关联实体施加类限制。对此有什么想法吗?我想远离直接 SQL 或 HQL。

【问题讨论】:

    标签: java hibernate criteria


    【解决方案1】:

    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}));,只是因为 Gavin 说“foo.class 在哪里”
    • 成功了吗?哦,Gavin 可能使用了in 而不是eq,因为 instanceof 也接受子类型,但 eq 不接受。因此,如果教师是抽象的,无论是 RegularTeacher 还是 SubstituteTeacher,你都需要 in(RegularTeacher.class, SubstituteTeacher.class) 来表达 instanceof Teacher
    【解决方案2】:

    我最终使用了本机 SQL。不是最棒的,但也不可怕:

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

    值得注意的是,这只是因为我使用的是 table-per-inheritance-hierarchy 映射策略。没有它,我就不会有一个鉴别器列。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多