[英]Hibernate Named Parameters in SQLQuery
無法將Hibernate命名參數插入到SQL查詢中:
String values="'a', 'b', 'c', 'd'";
SQLQuery query = getSession().createSQLQuery("SELECT * FROM data WHERE value IN (:values)");
query.setParameter("values", values);
List<Object[]> data = query.list(); // returns data: size = 0 ...
但是,如果我寫的話:
String values="'a', 'b', 'c', 'd'";
SQLQuery query = getSession().createSQLQuery("SELECT * FROM data WHERE value IN (" + values + ")");
List<Object[]> data = query.list(); // returns data: size = 15 ...
第二種方式返回數據而不是第一種方式。
在SQL中使用命名參數我做錯了什么?
values
變量應該是一個列表或一個字符串數組,而不是一個字符串,因為該參數在'IN'子句中。 所以,將代碼更改為以下代碼,它應該工作:
String[] values= {"a", "b", "c", "d"};
SQLQuery query = getSession().createSQLQuery("SELECT * FROM data WHERE value IN (:values)");
query.setParameterList("values", values);
List<Object[]> data = query.list();
你的第二種方法不是在查詢中創建一個命名參數,它只是連接一個字符串,你得到一個永久的查詢,就像這樣:
SQLQuery query = getSession().createSQLQuery("SELECT * FROM data WHERE value IN ('a', 'b', 'c', 'd')");
要使第一個使用Hibernate,您必須傳遞一個數組或一組對象,而不是單個字符串並使用setParameterList方法。 就像:
query.setParameterList("reportID", new Object[]{"a","b","c","d"});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.