问题描述
那些查询工作:
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
}