【问题标题】:Spring Boot JPA query for retrieve data from many to many Relationship Table用于从多对多关系表中检索数据的 Spring Boot JPA 查询
【发布时间】:2021-02-26 06:11:49
【问题描述】:

我需要从角色 ID = 2 的用户表中检索用户。这就是实体之间的关系。

下面的 MySQL 查询完美运行。并检索 role_id = 2 的用户。

select * from users INNER JOIN user_roles ON users.id = user_roles.user_id INNER JOIN roles ON roles.id = user_roles.role_id WHERE role_id='2';

但我需要在 Spring Boot 应用程序中执行此操作,这是实现的存储库。

@Query("select usr from User usr INNER JOIN user_roles ur "+
        "ON usr.id = ur.user_id INNER JOIN Role roles " +
        "ON roles.id = ur.role_id WHERE ur.role_id='2' AND usr.department=(:depId)")
List<User> findAll(@Param("depId") Long depId);

但 user_roles 不是实体,上面的查询不起作用。是否有解决方案或任何其他方式来实现我的目标?

【问题讨论】:

    标签: mysql spring-boot jpa


    【解决方案1】:

    这是您尝试在程序内部使用的查询。

        SELECT usr
          FROM User usr 
    INNER JOIN user_roles ur ON usr.id = ur.user_id 
    INNER JOIN Role roles ON roles.id = ur.role_id 
         WHERE ur.role_id='2' 
          AND usr.department=(:depId)
    

    您在SELECT 子句中提到的usr 不是任何表中的列。也许您应该尝试usr.*,而不是从匹配的User 表中获取所有列。

    而且,您无需加入Role 表即可获得role_id;它在user_roles 表中。所以,试试这个。

        SELECT usr.*
          FROM User usr 
    INNER JOIN user_roles ur ON usr.id = ur.user_id 
         WHERE ur.role_id='2' 
          AND usr.department=(:depId)
    

    专业提示 能够查看嵌入在程序中的查询并对其进行推理非常重要。在源代码中仔细格式化它们是值得的。

    【讨论】:

    • @Jones 问题未解决。 user_roles 不是实体。这是一个多对多映射表。问题来了
    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多