【问题标题】:Collection contains with @Query集合包含 @Query
【发布时间】:2012-05-09 23:31:44
【问题描述】:

有没有办法在@Query 标签中使用“包含”功能?如果不是,最好的实现方式是什么?

例子:

@Query("From User u  where u.roles contains :role")
List<User> findByRole(@Param("role") Role role);

User 类确实有一个 Collection 包含他们的 Roles

编辑:正如我所建议的那样,应用程序启动了,但是当这个方法被执行时,会发生“不匹配预期类型”的异常。

【问题讨论】:

    标签: java spring spring-data-jpa


    【解决方案1】:

    只需使用以下查询即可完成:

    @Query("From User u where :role member u.roles")
    

    【讨论】:

    • 可以链接到官方文档吗?
    • 你的意思是什么文档? @Query注解还是JPA规范?
    • “成员”表达式的规范文档。
    • 你可以看here。本节中有collection_member_expression的定义。
    【解决方案2】:

    使用like关键字。

    @Query("From User u  where u.roles like :role")
    

    【讨论】:

    • 您要选择关键字'role'的所有角色?
    • 也许这不是很清楚,或者我想这并不容易实现。我想获取所有具有传入角色的用户。角色是一个单独的类而不是字符串,“u.roles”是一个包含用户每个角色的集合。
    • 我试过 List findByRoles(Role role);它似乎工作正常。
    • 如果角色是一个集合然后做这样的事情from User u, Role r where r.roleName like "%administrator%" and r.roleId=u.roleId
    • 问题是关于集合成员而不是子字符串
    猜你喜欢
    • 2019-01-28
    • 2012-06-16
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2013-06-07
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多