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 语句返回的结果是 Integer

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

updateselect语句之间存在混合。更新语句不会获取任何对象。因此,使用Query#getResultList是错误的。Query#executeUpdate会更好用。

从文档。

获取结果列表

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

也可以看看

查询#getResultList()

于 2013-09-25T05:53:15.817 回答