Hibernate Unterabfragen.existiert
Ich habe ein problem mit Unterabfragen.besteht Kriterien.
Habe ich Folgendes:
DetachedCriteria criteria = DetachedCriteria.forClass(Expense.class, "mainExpense")
.add(Restrictions.eq("group", group))
.addOrder(Order.desc("created"));
if (all) {
criteria.add(
Restrictions.or(
Restrictions.eq("status", ExpenseStatus.PENDING),
Restrictions.eq("status", ExpenseStatus.COMPLETE)
));
} else {
criteria.add(Restrictions.eq("status", ExpenseStatus.PENDING));
}
if (user != null) {
DetachedCriteria userSubCriteria = DetachedCriteria.forClass(UserExpense.class, "userExpense")
.add(Restrictions.eq("userExpense.primaryKey.user", user))
.add(Restrictions.eq("userExpense.primaryKey.expense", "mainExpense"))
.setProjection(Projections.property("userExpense.primaryKey"));
criteria.add(Subqueries.exists(userSubCriteria));
}
return getHibernateTemplate().findByCriteria(criteria);
Wenn ich übergeben Sie einen null-Benutzer (nicht mit den Unterabfragen.vorhanden ist) funktioniert es okay und gibt mir die gültige aufwandspositionen. Wenn ich einen Benutzer, wenn mir die folgenden:
org.springframework.orm.hibernate3.HibernateSystemException: könnte nicht ein Feldwert durch Reflexion getter Aufwand.id; verschachtelte Ausnahme ist org.hibernate.PropertyAccessException: könnte nicht ein Feldwert durch Reflexion getter Aufwand.id
und tiefer in die Protokolle:
Kann nicht java.lang.Integer-Feld Kosten.id zu java.lang.String
Hat jemand eine Idee, was ich falsch mache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es gibt zwei Probleme bei der Abfrage:
Restrictions.eq()
. Ich glaube nicht, dass es gültig ist. Sollten Sie verwendenRestrictions.eqProperty("userExpense.primaryKey.expense.id", "mainExpense.id")
Es ist ein weiteres Vereinfachtes Beispiel Lösung die gleiche Art von problem. Die Kriterien setup Ergebnis als disjunkte setzt. Anzeigen - RegistryViewable (Objektdarstellung), Tisch - DocumentType-Objekt (Objekt-Darstellung), Relation 1:n DocumentType.id : @ManyToOne RegistryViewable.typDokumentu (Objekt-Repräsentation). In der entity-Klasse, RegistryViewable ist Attribut typDokumentu DocumentType geben. Attribut systemType hat Typ "boolean". Sehr wichtig ist die Klausel
setProjection
, ohne dass es die Kriterien nicht funktionieren.