2013-06-02 1 views
0

Я все еще новичок в Hibernate и пытаюсь получить результаты из простого запроса SELECT. Однако я продолжаю получать ClassCastException. Может ли кто-нибудь сказать мне, что я здесь делаю неправильно?Извлечение результатов из запроса в hibernate не работает

Вот код:

public Wo getWoById(int id) { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    List<Wo> result = (List<Wo>) session.createQuery("from Wo where woid = " + id); 

    if (result!=null && result.size()==1) 
     return result.get(0); 
    else return null; 
} 

... и сообщение об ошибке:

Exception in thread "main" java.lang.ClassCastException: 
org.hibernate.internal.QueryImpl cannot be cast to java.util.List 
at implDAO.WoImplDAO.getWoById(WoImplDAO.java:16) 
at logic.Logic.deleteWo(Logic.java:72) 
at nl.hanze.funda.admin.main.Main.<init>(Main.java:20) 
at nl.hanze.funda.admin.main.Runner.main(Runner.java:16) 

ответ

0

session.createQuery() возвращает запрос. Он не возвращает список его результатов. Вы забыли выполнить запрос:

List<Wo> result = (List<Wo>) session.createQuery("from Wo where woid = " + id) 
            .list(); 

Кроме того, вы должны использовать параметры вместо конкатенации строк:

List<Wo> result = (List<Wo>) session.createQuery("from Wo where woid = :id") 
            .setParameter("id", id) 
            .list(); 

Или, еще проще (и более эффективно), так как вы запрашивая по ID:

return ((Wo) session.get(Wo.class, id)); 
+0

А, я вижу. Спасибо за помощь :) – Anubis

0

Пожалуйста, измените запрос на

List<Wo> result = (List<Wo>) session.createQuery("from Wo where woid = " + id).list()