【问题标题】:Spring Data IN clause adds additional bracketsSpring Data IN 子句添加了额外的括号
【发布时间】:2016-10-16 15:17:27
【问题描述】:

我有一个带有“名称”列的“角色”表。我需要获取名称为“role1”或“role2”的所有角色。角色存储库方法如下所示:

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

我的数据库只包含“role1”。生成的请求如下所示:

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

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

【问题讨论】:

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


【解决方案1】:

正如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] 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2014-12-12
    • 2015-06-07
    相关资源
    最近更新 更多