[英]Hibernate classcast exception
你好
以下是我的查询。
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
虽然我正在施展它,为什么它会例外?
update语句返回的结果是Integer
update ProgramAccess p set p.isDeleted = 1 where p.id in (:progId)
update
和select
语句之间存在混合。 更新语句不会获取任何对象。 因此,使用Query#getResultList
是错误的。 Query#executeUpdate
将更好用。
来自文档。
getResultList
java.util.List getResultList()执行SELECT查询并将查询结果作为无类型List返回。 返回:结果列表
然后,如果将执行更新,正确的语法应该如下面的语句。
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();
也可以看看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.