尝试从数据库中删除时出错

时间:2012-11-12 08:55:57

标签: java hibernate oracle11g

您好我正在使用Hibernate并尝试从我的数据库中删除一些信息(Oracle 11g) 我有这样的代码:

    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery(DELETE_NEWS_BY_ID);
    query.setParameterList(ID, Arrays.asList(idList));
    query.executeUpdate();
    session.getTransaction().commit();

和DELETE_NEWS_BY_ID字段如下所示:

private static final String DELETE_NEWS_BY_ID = "delete from News where id IN (:idList)";

当我正在尝试处理此代码时IDE会给我这个:

java.lang.ClassCastException: [I cannot be cast to java.lang.Integer
    at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36)
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:57)
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:66)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.execute(BasicExecutor.java:95)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:413)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:282)
    at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1267)
    at org.hibernate.internal.QueryImpl.executeUpdate(QueryImpl.java:116)
    at com.epam.newsmanagement.dao.HibernateNewsDao.deleteNewsById(HibernateNewsDao.java:61)
    at com.epam.newsmanagement.action.NewsAction.delete(NewsAction.java:155)

我不知道最近I cannot be cast to java.lang.Integer是什么I

请帮助

更新

idList它是int [] idList

1 个答案:

答案 0 :(得分:3)

我觉得你的问题出在Arrays.asList(idList)调用中。看一下这篇文章:

Arrays.asList() not working as it should?

似乎asList方法不能很好地处理基本类型(报告时为int),这可能是导致Cast异常问题的原因。

将idList表单int更改为Integer:

Integer [] idList;

再试一次。祝你好运。