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?