簡體   English   中英

SQLQuery中的Hibernate命名參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM