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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章