Hibernate classcastexception

时间:2013-09-25 05:26:32

标签: java sql hibernate classcastexception

你好

以下是我的查询。

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 

虽然我正在施展它,为什么它会给予例外?

2 个答案:

答案 0 :(得分:1)

update语句返回结果为Integer

update ProgramAccess p set p.isDeleted = 1 where p.id in (:progId)

答案 1 :(得分:1)

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