hql查询中的空集合参数

时间:2015-10-11 16:05:25

标签: java hql spring-data

我正在使用弹簧数据。 在我的查询中,我将一个set作为参数传递并使用in子句:

(pc.currentClubId in (?1))

其中?1是该集合的占位符。 当我传递一个空集时,我得到了这个错误:

 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) and (pc.currentClubId in ())

如何在不添加假值的情况下修复此问题?

1 个答案:

答案 0 :(得分:1)

空参数集导致无效的sql语句和运行时错误 在执行查询之前,需要检查参数集的大小。 如果它是空的,你可以

  1. 如果您知道不能成为非空结果,则不要执行查询。

  2. 动态构建HQL字符串并用"(1 = 0)"替换条件。如果该集合为空。

  3. 为无法匹配的参数集添加值。显然这是一个笨拙的解决方案。