Was mitHibernate-Abfrage mit einem Alias
session.createCriteria(Composed.class, "main")
.createAlias("main.id.branch", "b1")
.add(Restrictions.eq("b1.owner", user))
.list();
falsch? Die entsprechende HQL funktioniert
String hql = "select main from Composed as main"
+ "left join main.id.branch as b1 where b1.owner = ?";
session.createQuery(hql)
.setInteger(0, user.id().intValue())
.list();
von den Kriterien, Hibernate keine beitreten erstellt und verwendet where b1x1_.owner_id=?
, aber es gibt keine b1x1_
überall, so schlägt es mit „Anweisung nicht vorbereiten konnte“.
Die Klassen sind ziemlich trivial
@Entity class Composed {
@Id ComposedId id; // also tried @EmbeddedId
... irrelevant stuff
}
@Embeddable class ComposedId {
@ManyToOne(optional=false) Branch branch;
... irrelevant stuff
}
@Entity class Branch {
@Id Integer id;
@ManyToOne(optional=false) User owner;
... irrelevant stuff
}
@Entity class User {
@Id Integer id;
... irrelevant stuff
}
aktualisieren
ich endlich eine SSCCE erstellt haben und eine issue abgelegt. Sorry für die verwirrende Frage, ohne die SSCCE, ist es ziemlich schwierig zu reproduzieren.
nicht sicher, aber haben Sie versucht Alias in Schritten erstellen? sag zuerst für main.id = x1 dann x1.branch = x2 und so weiter.? – Forkmohit
@Forkmohit Jetzt habe ich. IMHO gibt es keine Notwendigkeit für Aliasing main.id, wie es eingebettet ist, aber ich habe es versucht. Ich habe auch versucht, den Alias nur für main.id und whatelse zu erstellen. – maaartinus
Könnten Sie versuchen 'Restrictions.eq ("b1.owner.id", user.id(). IntValue())'? Könnten Sie auch die gesamte generierte SQL und Fehlermeldung teilen? –