7

Рассмотрим классы Account, RealAccount, VirtualAccount и Operation, что:Использование Hibernate Criteria API, как запросить подсвойство свойство, которое существует только для определенных типов собственности

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

Это означает, что:

  1. Только RealAccount имеет поле под названием name.
  2. Факс Operation может быть RealAccount или VirtualAccount.

Я хочу запросить все Operation с, которые принадлежат к RealAccount с определенным именем:

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

Это терпит неудачу.

Мой вопрос: Использование «старых» Hibernate Criteria API, как я могу запросить имя счета, что существует только тогда, когда Operation «s учетная запись является RealAccount? Может быть, что-то envolving DetachedCriteria и Subqueries ...

ответ

1

Вы можете ссылаться на nameRealAccount в подзапрос (ниже пример использует HQL, но Criteria equivalent должен быть простым):

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

Это не критерии API. – MarcG