Hibernate 连接期间子属性的Spring数据JPA@EntityGraph

Hibernate 连接期间子属性的Spring数据JPA@EntityGraph,hibernate,spring-boot,spring-data-jpa,Hibernate,Spring Boot,Spring Data Jpa,我想从子实体查询父实体(以及EntityGraph中指定的映射实体) 用户实体: public class User{ private Long userId; //other fields private Set<UserRoleOrganization> userRoleOrganizations; //Setters and getters } 我确实喜欢以下内容: @EntityGraph(attributePaths = { "userR

我想从子实体查询父实体(以及EntityGraph中指定的映射实体)

用户实体:

public class User{
    private Long userId;
    //other fields
    private Set<UserRoleOrganization> userRoleOrganizations;

    //Setters and getters
}
我确实喜欢以下内容:

@EntityGraph(attributePaths = { "userRoleOrganizations" })
@Query("Select t.user From UserToken t Where t.userToken = :accessToken")
User findDetailedUserByUserToken(@Param("accessToken") String accessToken);
但我得到的例外如下:

Caused by: org.hibernate.QueryException: could not resolve property: userRoleOrganizations of: com.dao.domain.security.UserToken

如何解决此问题?

我建议您也添加来自用户实体的一对一关系。通过这种方式,您可以从用户端编写查询。以下是变化:

1.添加另一方关系:
  • 在用户中添加UserToken实体关系

    public class User{
        @OneToOne(mappedBy='user')
        private UserToken uToken;
        //other fields
        //Setters and getters
    }
    
2.重写您的查询:
  • 您只需要从用户端编写查询

     @EntityGraph(attributePaths = { "userRoleOrganizations" })
     @Query("Select t From User t Where t.uToken.userToken = :accessToken")
     User findDetailedUserByUserToken(@Param("accessToken") String accessToken);
    

感谢您的回复。如果我添加OneToOne,那么每次它都会默认地作为其渴望的获取进行获取。我尝试使用OneToOne获取类型作为LAZY,但它不起作用。我已经在谷歌上注册过了,但我知道懒惰的抓取在OneTONE上是行不通的。
 @EntityGraph(attributePaths = { "userRoleOrganizations" })
 @Query("Select t From User t Where t.uToken.userToken = :accessToken")
 User findDetailedUserByUserToken(@Param("accessToken") String accessToken);