0

やあ

以下は私の質問です。

ProgramAccess access = null;
access =  (ProgramAccess)entityManager.
    createQuery("update ProgramAccess p set p.isDeleted = 1 where p.id in (:progId)")
    .setParameter("progId", idStrArray).getResultList();

私は例外を下回っています。

java.lang.ClassCastException: org.hibernate.ejb.QueryImpl cannot be cast to com.sony.spe.b2b.entity.ProgramAccess 

私はそれをキャストしていますが、なぜ例外を与えているのですか?

4

2 に答える 2

1

updateステートメントとステートメントが混在してselectいます。update ステートメントはオブジェクトをフェッチしません。したがって、使い方Query#getResultListは間違っています。Query#executeUpdate使い勝手が良くなります。

ドキュメントから。

getResultList

java.util.List getResultList() SELECT クエリを実行し、クエリ結果を型なしリストとして返します。戻り値: 結果のリスト

次に、更新が実行される場合、適切な構文は次のステートメントのようになります。

Query query = entityManager.
    createQuery("delete from user_tags where tag_id = :tagId and user_id = :userId");
        query.setParameter("progId", idStrArray);
        query.executeUpdate();

SQL とエンティティを使用して select ステートメントを実行することもできます。Query#setResultTransformerエンティティ マッピングに使用できます。選択したフィールドとエンティティ マッピングが一致するように注意することが重要です。

Query query =  (ProgramAccess)entityManager.
    createQuery("Proper select statement which matches with entity mapping.").setResultTransformer(Transformers.aliasToBean(ProgramAccess.class));
query.setParameter("progId", idStrArray);
List<ProgramAccess> list = query.list();

こちらもご覧ください

Query#getResultList()

于 2013-09-25T05:53:15.817 に答える
1

update ステートメントは結果を整数で返します

update ProgramAccess p set p.isDeleted = 1 where p.id in (:progId)
于 2013-09-25T05:37:44.493 に答える