【发布时间】:2019-10-15 19:10:53
【问题描述】:
我有 ClassRoom 和 User 类:
@Entity
public class ClassRoom {
@Id
@GeneratedValue
private Long id;
@OneToMany(fetch = FetchType.LAZY)
private List<User> users;
// etc
}
@Entity
public class User{
@Id
@GeneratedValue
private Long id;
@OneToMany(fetch = FetchType.LAZY)
private List<Role> roles;
// etc
}
具有惰性的一对多关系。
我正在尝试在 DAO 中获取包含用户及其角色的 ClassRoom:-
@Query("SELECT cr FROM ClassRoom as cr join fetch cr.users u")
但是通过该查询,我得到了 classRoom 及其用户,而不是他们的角色。请提出正确的方法来获取具有课堂角色的用户。
【问题讨论】:
-
如果您使用 Spring Data,您可以使用
@EntityGraph(attributePaths = {"users", "users.roles"})而不是@Query,并且您必须重新映射实体以使用Set而不是List,或者您会得到MultipleBagFetchException。否则,也许this article 可以帮助你。 -
@StefanGolubović 听起来不错,有解决此问题的方法。是的,我使用的是 spring data 4.1 和 JPA 1.7 以及 hibernate 4.3.6。我无法导入EntityGraph(attributePaths。请建议..
-
似乎
@EntityGraph注释是在 JPA 2.1 中引入的,所以我想您将不得不使用其他解决方案。
标签: java hibernate jpa join lazy-loading