在hibernate中检索查询结果不起作用

时间:2013-06-02 10:28:01

标签: java hibernate classcastexception

我仍然是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)

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

请将查询更改为

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