繁体   English   中英

Hibernate转发异常

[英]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)

updateselect语句之间存在混合。 更新语句不会获取任何对象。 因此,使用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();

也可以看看

查询#getResultList()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM