7

考慮班AccountRealAccountVirtualAccount屬性的子屬性,並Operation使得:使用Hibernate的標準API,如何查詢只存在於某些屬性類型

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

這意味着:

  1. 只有RealAccount有一個字段叫做name。可以是RealAccountVirtualAccount

我要查詢屬於一個RealAccount具有特定名稱的所有Operation S:

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

這種失敗。

我的問題:使用「老」的Hibernate API的標準,我怎麼可以查詢該帳戶名存在,只有當Operation的帳戶是RealAccount?也許一些envolving DetachedCriteriaSubqueries ...

回答

1

您可以在子查詢上RealAccount參考name(以下示例使用HQL,但Criteria equivalent應該直截了當):

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

這不是標準的API。 – MarcG