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開始,可以是任何數字,只是參數要與其對應上。
採用後面兩種查詢方法修改後就不會有告警信息產生了。