我有以下Hibernate查询语言的代码:
@Query("SELECT a FROM Table a " +
"WHERE (COALESCE(:param, null) IS NULL OR a.value in :param) "
)
List<InspectionInstruction> findAllInIds(@Param("param") List<Long> ids);
这个调用要么使用Id列表,要么只使用null。所以如果列表不为空,我想使用where子句,如果列表为空,我想省略where子句。实际的查询要大得多,有多个子句,所以将它们分开不是一个可行的选择。
它与MySQL(版本8)一起工作得很好,但是与H2一起使用时,我得到以下错误:
WARN [http-nio-auto-1-exec-4] --- o.h.e.j.s.SqlExceptionHelper: SQL Error: 50004, SQLState: HY004
ERROR [http-nio-auto-1-exec-4] --- o.h.e.j.s.SqlExceptionHelper: Unknown data type: "NULL, ?"; SQL statement:
select a0_.id as col_0_0_ from table a0_ where coalesce(?, null) is null or a0_.id in (?) [50004-214]
我的H2连接字符串:
url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
driverClassName: org.h2.Driver
有没有一种方法可以在H2中将可能的null值作为参数处理?如果有任何好处的话,我也可以传递一个空列表而不是null。
1条答案
按热度按时间xoshrz7s1#
这不是我想要的答案,而是一个有效的答案:
我尝试了一些
CriteriaBuilder
实现,但由于整个项目都使用HQL,而且我也喜欢编写HQL语句,因为它们与SQL很接近,所以我最终这样做了:在我看来这是一个有点丑陋的方法,但它确实起到了作用。
我还发现了size()函数,很兴奋,但它不支持参数。