2013-06-02 38 views
0

我仍然是Hibernate的新手,我試圖從簡單的SELECT查詢中檢索結果。但是我一直得到一個ClassCastException。任何人都可以告訴我我在這裏做錯了什麼?從休眠查詢中檢索結果不起作用

下面的代碼:

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(); 

此外,你應該使用的參數,而不是字符串連接:由於您的ID查詢

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

甚至更​​簡單(和更有效):

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

啊,我明白了。謝謝您的幫助 :) – Anubis

0

請查詢改爲

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