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 に答える