使用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)

...全文
296 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kneci 2015-05-18
  • 打赏
  • 举报
回复
我也遇到这个问题,请问楼主解决了没有?
mftbc 2014-10-22
  • 打赏
  • 举报
回复
引用 2 楼 yueming158 的回复:
楼上应该理解错误了,他这里想要说的意思是查询条件中的值的长度超过了数据库中设计的字段的长度。这样查询是可以的,不能说查询条件中的值不能比数据库设计的值的长度长。还有你确定你直接写参数到SQL中Hibernate执行就没有问题么??看你的异常信息不像是因为这个原因而引发的错误。
如果把参数直接写到SQL中,query.setParameter注释掉,就不报错了,返回查询结果条数0件。想不通啊~~~
sinat_19250161 2014-10-21
  • 打赏
  • 举报
回复
这个 应该 是sql 异常 吧
lucky_love123 2014-10-21
  • 打赏
  • 举报
回复
不科学吖 hibernate也是转换成原生sql执行的
yueming 2014-10-21
  • 打赏
  • 举报
回复
楼上应该理解错误了,他这里想要说的意思是查询条件中的值的长度超过了数据库中设计的字段的长度。这样查询是可以的,不能说查询条件中的值不能比数据库设计的值的长度长。还有你确定你直接写参数到SQL中Hibernate执行就没有问题么??看你的异常信息不像是因为这个原因而引发的错误。
Magical茏 2014-10-21
  • 打赏
  • 举报
回复
...明知长了 还往里插入,项目中这样做 早被骂死了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧