Hibernate佔位符問題[use named parameters or JPA-style positional parameters instead.]

hibernate 4.1之後對於HQL中查詢參數的佔位符做了改進,如果仍然用老式的佔位符會有類似如下的告警信息:

[main] WARN  [org.hibernate.hql.internal.ast.HqlSqlWalker] – [DEPRECATION] Encountered positional parameter near line 1, column 95.  Positional parameter are considered deprecated; use named parameters or JPA-style positional parameters instead.

從告警提示信息中可以看出,它建議用命名參數或者JPA佔位符兩中種方法來代替老的佔位符查詢方法。

比如老的佔位符查詢代碼片段:

String hql = "select t from Blog t where t.site=?";
Query query = getSession().createQuery(hql);
query.setParameter(0, "micmiu.com");

方法一:改成命名參數的方式:

//命名參數的方式
String hql2 = "select t from Blog t where t.site=:site";
Query query2 = getSession().createQuery(hql2);
query2.setParameter("site", "micmiu.com");

方法二:改成JPA佔位符的方式:

//JPA佔位符方式
String hql3 = "select t from Blog t where t.site=?0";
Query query3 = getSession().createQuery(hql3);
query2.setParameter(0, "micmiu.com");

其中"?"後面的"0"代表索引位置,在HQL語句中可重複出現,並不一定要從0開始,可以是任何數字,只是參數要與其對應上。

採用後面兩種查詢方法修改後就不會有告警信息產生了。

發佈了110 篇原創文章 · 獲贊 197 · 訪問量 320萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章