我有一个'角色'带有'名称'的表格柱。我需要获得所有角色,其中名称是' 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
最后一个问题:我错过了什么?
答案 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]