由于项目升级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修改后都要进行测试,也是很耗时的。