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)
4

2 回答 2

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));
于 2013-06-02T10:31:41.150 回答
0

请将查询更改为

List<Wo> result = (List<Wo>) session.createQuery("from Wo where woid = " + id).list() 
于 2013-06-02T10:38:37.457 回答