我有一个 JPA 存储库接口,方法如下:
@Modifying
@Query(value = "DELETE FROM bivrip.bloop_options o WHERE o.bloop_id = ?1 AND o.id not in ?2", nativeQuery = true)
public void removeOtherOptions(int bloopID, List<Integer> validOptionIDs);
当 validOptionIDs 至少包含一个元素时,该方法将按预期运行,并删除不在与给定 bloop 关联的列表中的所有 id。但是,如果列表为空,它不会删除任何内容 - 当我假设它会删除所提供的 bloop 的所有选项时。
我需要做任何额外的配置才能使其工作吗?或者我是否注定要按照“removeAllOptionsForBloop”的方式编写另一个方法?
注意:如果这通常可以工作并且是特定数据库实现的结果,那么我正在使用 postgres。
重写查询以使用数组参数和
<> ALL
运算符:
... AND o.id <> ALL (?2)
这也适用于空数组。