Hibernate setParameter 报错 Unknown parameter position: 0

由于项目升级jdk版本以及Spring的版本,Spring版本由3升级到了5.1.7,对应的Hibernate也由3升级到了5.4.2,升级后最痛苦的就是原来代码中设置参数的地方都报错,找不到正确的位置,查询一些资料说下标从1开始,改成1以后也不对。原sql类似:

select * from user where name = ?

5版本中Query已经过时了,将org.hibernate.Query替换成新版的org.hibernate.query.Query后,尝试在拼接sql中改为?0或者?1来标定参数位置,均会报错Unknown parameter position。随后翻看官方文档,推荐使用=:的形式,无奈只能将所有sql参数绑定的地方改为新的形式,并且hibernateTemplate.find()方法也过时也,推荐使用execute()方法:

String sql = "select * from USER where name =: name";
List<?> results = this.hibernateTemplate.execute(session -> {
            Query query = session.createQuery(sql);
            query.setParameter("name", name);
            return query.list();
        });

setParameter中的key就是拼接sql中的=:后的值,通过key设置参数值,同样原来sql中的>?改为>:的形式

这种写法要比原来的find方法麻烦很多,所有sql修改后都要进行测试,也是很耗时的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值