由於項目升級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修改後都要進行測試,也是很耗時的。