用空表达式列表中的字段选择

问题描述

那些查询工作:

SELECT field FROM table WHERE id IN (1,2,3);
SELECT field FROM table WHERE id IN (1);

为什么这个查询有错误? (ORA-00936: missing expression

SELECT field FROM table WHERE id IN ();

我怎么说“空集”?

我有这个应用程序,它从用户那里接收ID,他们可以发送0,1或任意多个。

我通常使用休眠和HQL语法,但最后出现空白列表时出现同样的错误

解决方法

此问题的根本原因在于,Hibernate实际上只是使用JDBC准备的语句。因此,您的查询实际上被评估为:

SELECT field FROM table WHERE id IN (?);

这里的问题是,当您尝试不绑定任何内容时,您似乎会遇到语法错误。

我认为,最好的解决方法是只是在执行查询之前检查集合是否为空

String field = null;
List<Integer> ids = new ArrayList<>();   // leave it empty

if (field != null) {
    // execute your HQL query,using ids
    // assign result to field
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...