Betrachten wir die Klasse Operation
, und seine drei Unterklassen:Alias für Eigenschaften, die nur in Unterklassen (Hibernate Criteria) existieren
class Operation {}
class OpA extends Operation { }
class OpB extends Operation { Account account; }
class OpC extends Operation { Account account; }
Nur OpB
und OpC
ein Feld account
genannt haben.
Ich möchte für die account
Eigenschaft abfragen:
session.createCriteria(Operation.class)
.add(Restrictions.eq("account", account))
.list();
Dies funktioniert. Hibernate ignoriert die Tatsache, dass sowohl Operation
als auch OpA
kein Feld mit der Bezeichnung account
haben, und gibt die korrekten Ergebnisse für OpB
und OpC
zurück.
Allerdings möchte ich jetzt auch für den Kontoinhaber abfragen und damit bestellen. Ich erstelle dann den Alias _account
für 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();
Dies schlägt fehl. Es gibt zwei getrennte Tabellen für das Konto (von OpB
und OpC
), so Hibernate klagt:
Not unique table/alias: 'account1_'
Meine Frage: Wie kann ich beide Abfrage für das Konto und den Kontoinhaber mit nur Criteria
(keine SQL, HQL) auf die einfachste Weise?
Was wäre die gewünschte SQL aussehen? –
@Pedrag: Sorry, ich habe keine Ahnung. – MarcG