Spring JpaRepository @Query中的多重联接

svmlkihl  于 2022-11-21  发布在  Spring
关注(0)|答案(1)|浏览(93)

我有一个具有角色的用户实体。角色实体具有权限。我的实体如下所示:
第一个
我想加载一个具有其角色和权限的用户。
我尝试在JpaRepository中使用@Query注解定义一个方法,

public interface UserRepository extends JpaRepository<User, Long> {

    Optional<User> findByEmail(String email);
    
    @Query("SELECT u FROM User u " +
            "INNER JOIN u.role r " +
            "INNER JOIN r.privileges p " +
            "WHERE u.id = ?1")
    Optional<User> findByIdWithRoleAndPrivileges(Long id);

}

我的用户加载了他的角色对象,但没有角色的权限。知道我做错了什么吗?

vyu0f0g1

vyu0f0g11#

默认情况下,大多数关联都是延迟提取的。要立即提取多对多角色-权限关联,请将查询更改为:

@Query("SELECT u FROM User u " +
        "INNER JOIN FETCH u.role r " +
        "INNER JOIN FETCH r.privileges p " +
        "WHERE u.id = ?1")

“JOIN FETCH”是导致JPA/Hibernate急切地获取关联实体的原因。

相关问题