java - SQLQuery 中的 Hibernate 命名参数

标签 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 ...

但是,如果我会写:

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();

关于java - SQLQuery 中的 Hibernate 命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889465/

相关文章:

hibernate - ConstraintViolationException VS DataIntegrityViolationException

java - 如果我需要在生成的 hibernate Pojo 上添加接口(interface),这是一个很好的实践

java - "Not supported for DML operations"使用简单的 UPDATE 查询

mysql - 当同时保留父/子对象时,如何在 Hibernate + Spring JPA 配置中填充外键值?

java - 如何使用 Java 读取正在写入的文件?

java - 是否有一个 Iterable 允许另一个实例调用 Iterable.remove() ?

java - 康威生命游戏算法错误

spring - 手动更改 Multi-Tenancy session

java - 对齐 Javafx 布局中的按钮

java - 将非 Activity 类中的回调方法结果传递给android Activity 类?