考虑类Account
,RealAccount
,VirtualAccount
和Operation
,使得:
class Account { }
class RealAccount extends Account { String name; }
class VirtualAccount extends Account { }
class Operation { Account account; }
这意味着:
RealAccount
有一个名为name
的字段。 Operation
的帐户可以是RealAccount
或VirtualAccount
。 我想查询属于具有特定名称的
Operation
的所有RealAccount
:session.createCriteria(Operation.class)
.createAlias("account", "_account")
.add(Restrictions.eq("_account.name", "Alice"))
.list();
这失败了。
我的问题:使用“旧”的Hibernate Criteria API ,如何查询仅当
Operation
的帐户是RealAccount
时才存在的帐户名?也许是涉及DetachedCriteria
和Subqueries
的东西... 最佳答案
您可以在子查询中的name
上引用RealAccount
(以下示例使用HQL,但是Criteria equivalent应该很简单):
select op from Operation op
where op.account.id in
(select id from RealAccount where name = :name)