使用Hibernate执行原生SQL查询的问题
mftbc 2014-10-21 01:36:09 执行SELECT语句时,如果绑定的参数长度超过数据库字段长度,就会报出
[org.hibernate.exception.DataException: could not extract ResultSet]异常。
但如果把参数写死在SQL语句中执行,就不会发生异常。
代码大致如下:
String sql=”SELECT * FROM USER WHERE PERSON_CD=:PERSON_CD”;
Query query=session.createSQLQuery(sql);
query.setParameter(“PERSON_CD”, "AAAAAAAAAA", StringType.INSTANCE);
query.list(); --> 执行到这里时出错
字段PERSON_CD在数据库的长度是6位。
不知道有没有人碰到过类似问题,是需要对Hibernate做哪些配置吗?
org.hibernate.exception.DataException: could not extract ResultSet
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:135)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2065)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838)
at org.hibernate.loader.Loader.doQuery(Loader.java:909)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
at org.hibernate.loader.Loader.doList(Loader.java:2553)
at org.hibernate.loader.Loader.doList(Loader.java:2539)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369)
at org.hibernate.loader.Loader.list(Loader.java:2364)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:353)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1873)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141)