你好
以下是我的查询。
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
虽然我正在施展它,为什么它会给予例外?
答案 0 :(得分:1)
update语句返回结果为Integer
update ProgramAccess p set p.isDeleted = 1 where p.id in (:progId)
答案 1 :(得分:1)
update
和select
语句之间存在混合。更新语句不会获取任何对象。因此,使用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();
另见