2016-03-24 14 views
0

Ich bin neu in Hibernate Criteria, ich fand viele Beispiele mit Liste. Mag wissen, wie ein Kriterienobjekt in Mitarbeiter-Objekt konvertiert werden kann. Ist es möglich, dass Hibernate-Kriterien eine Klassenentität zurückgeben?java.lang.ClassCastException: org.hibernate.impl.CriteriaImpl kann nicht umgewandelt werden

Employee emp= (Employee) session.createCriteria(Employee.class,"a") 
.createAlias("a.jobs", "j") 
.add(Restrictions.eq("id", id)) 
.add(Restrictions.eq("j.active", "1")); 

java.lang.ClassCastException: org.hibernate.impl.CriteriaImpl kann nicht auf Mitarbeiter gegossen werden.

Jobs Objekt ist eine zu viele Beziehung, versuchen Objekte von Arbeitsplätzen filteractive

Antwort

1

Sie benötigen list() Methode verwenden

List<Employee> result = (List<Employee>) session.createCriteria(Employee.class,"a") 
.createAlias("a.jobs", "j") 
.add(Restrictions.eq("id", id)) 
.add(Restrictions.eq("j.active", "1")).list(); 

oder uniqueResult(), aber Sie werden eine Ausnahme haben, wenn es mehr ist als ein Rekord. Wenn kein Ergebnis vorliegt, wird uniqueResult()null zurückgegeben.

Employee result = (Employee) session.createCriteria(Employee.class,"a") 
.createAlias("a.jobs", "j") 
.add(Restrictions.eq("id", id)) 
.add(Restrictions.eq("j.active", "1")).uniqueResult(); 
+0

Wie ich von ID bin Filterung, wird es sei ein einzelnes Objekt. –

+0

@CorkKochi Ich aktualisiere meine Antwort. Sie können nur diese beiden Methoden verwenden. –

+0

@CorkKochi Ich bearbeite für ein 'uniqueResult()' Ergebnis. –

0

Wenn es mehrere Datensätze, aber sie einzelnes eindeutiges Ergebnis wollen in die Modellklasse zu werfen, ohne Liste zu verwenden, dann können Sie auch folgende Dinge verwenden:

Employee emp= (Employee) session.createCriteria(Employee.class,"a") 
.createAlias("a.jobs", "j") 
.add(Restrictions.eq("id", id)) 
.add(Restrictions.eq("j.active", "1")).setMaxResults(1).uniqueResult(); 
Verwandte Themen