Kiedy używam list() z Hibernate (HQL) po createQuery(), wtedy chcę bezpośrednio wpisać rzut List<Object[]>
do mojego List<POJO class>
. Opiszę tutaj mój rzeczywisty scenariusz. Mam 3 zwykłe stare obiekty Java, mówię o osobie, operacji i projekcie, a tabela mówi Transakcje z obcymi odniesieniami do osoby, operacji i projektu.hibernate HQL createQuery() list() typ rzutowany na model bezpośrednio
class Person {
String name;
// getters and setters
}
class Operation {
String name;
// getters and setters
}
class Project {
String name;
// getters and setters
}
class Transaction {
String p_id;
String o_id;
String project_id;
// refers to id of All three table above
}
Teraz chcę wykonać kwerendy Hibernate Query Language powiedzieć String query="select p.name, o.name, project.name from Person p , Operation o, Project project , Transaction t where p.id=2 and p.id=t.p_id and o.id=t.o_id and project.id=t.project_id"
.
Utworzyłem klasę Model dla wyniku tego zapytania, powiedzmy POP_Model.
private class POP_Model {
String person_name;
String operation_name;
String project_name;
}
Teraz chcę użyć kwerendy hibernacji:
Session session=HibernateConnection.getSessionFactory().openSession();
Query q=session.createQuery(query);
List<POP_Model> list=(List<POP_Model>)q.list();
Daje typecast błąd mówiąc Object [] nie mogą być konwertowane do POP_Model. Sprawdziłem typedQuery, ale nie dostałem tego przykładu. Ale o ile mi wiadomo, TypedQuery może być użyty do odwzorowania na POJO a nie Model. Chcę bezpośrednio wpisać rzut do modelu.
Jednym z podejść do lepszego rozwiązania problemu jest przejście na API kryteriów. –
"Kryteria Api" oznacza? możesz wskazać dowolny link do niego. – Misha