确定在Spring引导中是否将空列表参数传递给参数化的@NamedNativeQuery

确定在Spring引导中是否将空列表参数传递给参数化的@NamedNativeQuery,spring,named-query,nativequery,hibernate-query,Spring,Named Query,Nativequery,Hibernate Query,我有三个表:user、privilege和user\u privilege。最后一个表存储user\u id和privilege\u id,即有关用户及其权限的信息。我想按权限筛选用户。为此,我将特权ID的列表列表privilegeIDs作为参数传递给下面的查询: @NamedNativeQuery(name = "User.filterUsersByPrivilges", query = "SELECT u.username " + "FROM

我有三个表:
user
privilege
user\u privilege
。最后一个表存储
user\u id
privilege\u id
,即有关用户及其权限的信息。我想按权限筛选用户。为此,我将特权ID的列表
列表privilegeIDs
作为参数传递给下面的查询:

@NamedNativeQuery(name = "User.filterUsersByPrivilges",
        query = "SELECT u.username " +
                "FROM user u " +
                "LEFT JOIN user_privilege up ON u.id = up.user_id " +
                "WHERE up.privilege_id IN ?1; ",
        resultSetMapping = "userCatalog")
然而,在客户端(Angular 5),有时为了检索所有用户,我可能会将此特权列表留空,不管他们是否拥有特权。在这里我发现,如果我在条件中将空列表参数传递给
,它会在服务器日志中给出一个错误。当在
条件下检查
时,参数不能为空

我已尝试传递
null
并使用
检查-1或-1中的up.privilege\u id是否为null
,但它仍然发誓您不能将空列表传递给
中的

现在,问题是:我必须如何检查列表是否为空,以便我可以检索所有用户,即使他们有或没有特权;同时,如果参数不是空的,则检索具有列表参数中指定的权限的用户


如果你有解决类似问题的经验,请帮助我。提前谢谢

我找到了解决问题的办法。在客户端(5),在发送特权列表之前,我检查它是否为空。如果列表中没有数据,我将按如下方式发送特权筛选器列表:
[0]

同时,我正在更改我的查询,如下所示:

@NamedNativeQuery(name = "User.filterUsersByPrivilges",
        query = "SELECT u.username " +
                "FROM user u " +
                "LEFT JOIN user_privilege up ON u.id = up.user_id " +
                "WHERE up.privilege_id IN ?1 OR (0 IN ?1 AND 1=1); ",
        resultSetMapping = "userCatalog")

通过1中的
0和1=1
我确定此列表是否为空,并检索所有用户,无论他们是否具有权限。

检查该参数以前是否存在,以及是否调用其他查询如何?@NiVeR我也考虑过它。然而,我在这篇文章中简化了我的疑问。事实上,我有三个“左加入”:用户特权、用户竞争、用户爱好。所以,我不认为我应该编写8个不同的查询:DTry Spring数据规范!