问题描述
我使用Hibernate
和JpaRepository
处理数据库操作。
@Query(value="select * from history h where h.project_id in :projects",nativeQuery=true)
List<History> getHistoriesByProjectsIn(@Param("projects")List<Long> projects);
,并且当我传递有效且不为空的List<Long>
时,它正在工作。但是,当我传递可能会发生的空列表时,在我的情况下这并不罕见,我得到:
org.postgresql.util.PsqlException: ERROR: Syntax error at or near ")"
有人可以给我提示如何摆脱它吗?
解决方法
PostgreSQL文档states:in
谓词不能保存空列表
expression IN (value [,...])
并且随着冬眠原样传递本地查询,可以预见这会导致问题。
但是,作为解决方法,您可以遵循this的建议:使用不可能的值初始化列表。
编辑
实际上,此行为已在休眠5.4.10中更改。参见commit:
SHA-1: ab9ae431858dc6727023d7f03bd6925f99011c62
* HHH-8901 replace "in ()" SQL with "in (null)" in QueryParameterBindingsImpl
对于您的情况,将生成以下sql:
select * from history h where h.project_id in (null)
任务HHH-8901的描述与这些更改完全无关。