SQLQuery中的Hibernate命名参数

Vik*_* V. 3 java hibernate

无法将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 ...
Run Code Online (Sandbox Code Playgroud)

但是,如果我写的话:

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 ...
Run Code Online (Sandbox Code Playgroud)

第二种方式返回数据而不是第一种方式.

在SQL中使用命名参数我做错了什么?

Pri*_*esh 10

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();
Run Code Online (Sandbox Code Playgroud)

  • @ user1376885是的,这是Hibernate对IN子句的行为.如果它是JPA查询,它也应该与setParameter一起使用. (2认同)