Hibernate模糊查询的一个问题

本文详细解释了在使用Hibernate框架进行数据库查询时遇到的参数设置错误,并提供了正确的解决方案。通过对比不同类型的参数设置方法,帮助读者理解如何正确地在HQL语句中使用参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from Project o where 1=1 and o.isDeleted=? and o.prjName like '%?%'; (对应以下(1))
在执行createQuery时没有问题,在为第一个参数赋值时也没有问题,但是就是为第二个参数赋值时总报错:
严重: java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
javax.faces.el.EvaluationException: java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
其实造成这个问题的根本原因还是对hibernate的使用不太了解,改成这样就没错了:from Project o where 1=1 and o.isDeleted=? and o.prjName like ?; query.setString(i, "%"+实际查询条件+"%"); 注意参数中第一个百分号的左边与第二个百分号的右边都没有单引号,这和平时写SQL语句是不同的,要特别关注一下。另外还应该了解一下俩点的区别
  (1)HQL:from Project o where 1=1 and o.PRJ_NAME like '%strCond%';//这里PRJ_NAME 应该是数据库表中的实际字段名
  HQL:from Project o where 1=1 and o.PRJ_NAME like '%strCond%';//这里PRJ_NAME 应该是实体类的属性名
  (1)HQL:from Project o where 1=1 and PRJ_NAME like '?';//这里的?不视为占位参数
  HQL:from Project o where 1=1 and PRJ_NAME like ?;//设置参数值时会自动在参数值两边加上单引号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值