如何在 Java JPA 中使用带有可能为空列表参数的 SQL 'in' 子句?

问题描述 投票:0回答:1

我有一个 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。

java postgresql jpa
1个回答
0
投票

重写查询以使用数组参数和

<> ALL
运算符:

... AND o.id <> ALL (?2)

这也适用于空数组。

© www.soinside.com 2019 - 2024. All rights reserved.