用作“IN”比较的列表为空时出错
Error when list used as an `IN` comparison is empty
我有以下更新查询:
@Transactional
@Modifying
@Query("UPDATE DailyEntry dailyEntry SET dailyEntry.status = :status WHERE dailyEntry.id IN :id")
void updateDailyEntriesStatus(@Param("status") EntryStatus status, @Param("id") List<Long> id);
它工作正常,但当 :id
为空时出现错误。错误消息并没有多大帮助:
could not execute statement
我想了解为什么空列表会成为问题。如果它为空,则每个 dailyEntry
.
的条件应该为假
但如果是这种情况,是否有办法防止该错误并使查询在 :id
为空时仍然有效?我也可以只检查它在我的 service
中是否为空,并且只在它不为空时调用该查询。我不确定什么是更好的方法。
IN()
期待一个表达式,就像比较运算符需要左侧和右侧都有意义一样。也就是说,
... WHERE value IN ();
有点像在说
if value =
这不是一个完整的表达式。但是你已经有了一个很好的答案:
I could also just check whether it's empty inside my service and only call that query when its not empty. I'm not sure what's the better approach.
仅当 IN
子句不为空时才执行查询是更好的方法。正如我相信您也说过的那样,您可以在调用查询的同一函数中执行此操作;在调用查询之前只是 return 一个空结果,这样调用者就不需要担心这些细节。
我有以下更新查询:
@Transactional
@Modifying
@Query("UPDATE DailyEntry dailyEntry SET dailyEntry.status = :status WHERE dailyEntry.id IN :id")
void updateDailyEntriesStatus(@Param("status") EntryStatus status, @Param("id") List<Long> id);
它工作正常,但当 :id
为空时出现错误。错误消息并没有多大帮助:
could not execute statement
我想了解为什么空列表会成为问题。如果它为空,则每个 dailyEntry
.
但如果是这种情况,是否有办法防止该错误并使查询在 :id
为空时仍然有效?我也可以只检查它在我的 service
中是否为空,并且只在它不为空时调用该查询。我不确定什么是更好的方法。
IN()
期待一个表达式,就像比较运算符需要左侧和右侧都有意义一样。也就是说,
... WHERE value IN ();
有点像在说
if value =
这不是一个完整的表达式。但是你已经有了一个很好的答案:
I could also just check whether it's empty inside my service and only call that query when its not empty. I'm not sure what's the better approach.
仅当 IN
子句不为空时才执行查询是更好的方法。正如我相信您也说过的那样,您可以在调用查询的同一函数中执行此操作;在调用查询之前只是 return 一个空结果,这样调用者就不需要担心这些细节。