今天修改了几条占用资源比较多的hql语句,把传递参数的hql改为“?”的形式,遇到了如下错误,看似很负责的错误,其实很简单的原因,
代表的是HQL语句中的第一个参数和数据库中字段类型不匹配。数据库中是number型,结果给传递成了Strings型,自然报错了,不过hibernate可谓是大动肝火,出了个触发器中的错误。
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute update query; uncategorized SQLException for SQL [delete from relate_member where (related_id not in (? , ? , ?)) and relate_member_id=? and relate_type=?]; SQL state [null]; error code [17041]; 索引中丢失 I
N 或 OUT 参数:: 1; nested exception is java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1680)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3279)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3367)
at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:75)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:334)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:209)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at com.seeyon.v3x.peoplerelate.dao.PeopleRelateDao$2.doInHibernate(PeopleRelateDao.java:51)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:334)
or.java:75)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:334)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:209)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at com.seeyon.v3x.peoplerelate.dao.PeopleRelateDao$2.doInHibernate(PeopleRelateDao.java:51)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:334)