Spring Data IN子句添加了额外的括号

时间:2016-06-15 13:16:53

标签: java spring spring-mvc spring-data spring-data-jpa

我有一个'角色'带有'名称'的表格柱。我需要获得所有角色,其中名称是' role1'或者' role2'。角色存储库方法如下所示:

Set<Role> findByNameIsIn(Set<String> roleNames);

我的数据库仅包含&#39; role1&#39;。生成的请求如下所示:

SELECT ID, NAME FROM ROLE WHERE (NAME IN ((?,?)))
    bind => [role1, role2]

请注意参数周围的双括号。结果集为空。当我通过h2控制台手动尝试此查询时 - 也没有结果。以下查询有效:

SELECT ID, NAME FROM ROLE WHERE (NAME IN ('role1', 'role2'))

我的集合完全包含两个元素。应支持集作为参数类型。见:https://dzone.com/refcardz/core-spring-data

最后一个问题:我错过了什么?

1 个答案:

答案 0 :(得分:7)

正如Oliver Gierke提到的那样 - 在EclipseLink中为此问题打开了一个错误(这是我作为持久性提供程序使用的)问题跟踪器。自2011年以来!..这是解决方法:

@Query("select r from Role r  where r.name in ?1")
Set<Role> findByNameIsIn(Set<String> roleNames);

这是有效生成的查询:

SELECT ID, NAME FROM ROLE WHERE (NAME IN (?,?))
    bind => [role1, role2]