【问题标题】:Using Hibernate Criteria API, how to query for a subproperty of a property that exists only for certain property types使用 Hibernate Criteria API,如何查询仅存在于某些属性类型的属性的子属性
【发布时间】:2017-04-14 05:39:44
【问题描述】:

考虑类 AccountRealAccountVirtualAccountOperation,这样:

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

这意味着:

  1. 只有RealAccount 有一个名为name 的字段。
  2. Operation的账号可以是RealAccount或者VirtualAccount

我想查询属于具有特定名称的RealAccount 的所有Operations:

session.createCriteria(Operation.class)
   .createAlias("account", "_account")
   .add(Restrictions.eq("_account.name", "Alice"))
   .list();

这失败了。

我的问题:使用 "old" Hibernate Criteria API,如何查询仅当Operation 的帐户为RealAccount?也许涉及DetachedCriteriaSubqueries...

【问题讨论】:

标签: java hibernate subquery hibernate-criteria detachedcriteria


【解决方案1】:

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

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

【讨论】:

  • 那不是 Criteria API。
猜你喜欢
  • 1970-01-01
  • 2011-10-17
  • 2015-03-14
  • 2012-01-29
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多