Consider the class Operation
, and its 3 subclasses:
class Operation {}
class OpA extends Operation { }
class OpB extends Operation { Account account; }
class OpC extends Operation { Account account; }
Only OpB
and OpC
have a field called account
.
I want to query for the account
property:
session.createCriteria(Operation.class)
.add(Restrictions.eq("account", account))
.list();
This works. Hibernate ignores the fact that both Operation
and OpA
have no field called account
, and returns the
correct results for OpB
and OpC
.
However, now I also want to query for the account owner, and order by it. I then create the alias _account
for account
:
session.createCriteria(Operation.class)
.add(Restrictions.eq("account", account))
.createAlias("account", "_account")
.add(Restrictions.eq("_account.owner", "John"))
.addOrder(Order.asc("_account.owner"))
.list();
This fails. There are 2 separate tables for the account (from OpB
and OpC
), so Hibernate complains:
Not unique table/alias: 'account1_'
My question: How can I query for both the account and the account owner, using only Criteria
(no SQL, HQL) in the simplest possible way?