考虑类AccountRealAccountVirtualAccountOperation,使得:

class Account { }
class RealAccount extends Account { String name; }
class VirtualAccount extends Account { }
class Operation { Account account; }

这意味着:
  • 只有RealAccount有一个名为name的字段。
  • Operation的帐户可以是RealAccountVirtualAccount

  • 我想查询属于具有特定名称的Operation的所有RealAccount:
    session.createCriteria(Operation.class)
       .createAlias("account", "_account")
       .add(Restrictions.eq("_account.name", "Alice"))
       .list();
    

    这失败了。

    我的问题:使用“旧”的Hibernate Criteria API ,如何查询仅当Operation的帐户是RealAccount时才存在的帐户名?也许是涉及DetachedCriteriaSubqueries的东西...

    最佳答案

    您可以在子查询中的name上引用RealAccount(以下示例使用HQL,但是Criteria equivalent应该很简单):

    select op from Operation op
    where op.account.id in
      (select id from RealAccount where name = :name)
    

    09-10 10:12