JPA与Hibernate - 多对多关系,获取所有数据

Gau*_*avJ 2 sql many-to-many hibernate jpa hql

用户和角色之间有很多很多关系.例如

public class User {
   @Id
   private Integer id;

   @ManyToMany
   @JoinTable(name = "APP_USER_ROLE", 
     joinColumns = { @JoinColumn(name = "USER_ID") }, 
     inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
   private List<Role> roles = new ArrayList<Role>();
}

@Entity     
public class Role {
  @Id
  private Integer id;

  @ManyToMany(mappedBy = "roles")
  private List<User> users = new ArrayList<User>();
}
Run Code Online (Sandbox Code Playgroud)

我的要求是使用他们的角色获取系统中的所有用户.使用HQL时我的查询是

select u, u.roles from User u
Run Code Online (Sandbox Code Playgroud)

但是,这会为具有相应角色的每个用户触发查询.如果有100个用户,则会触发100个查询.但是在SQL中我可以使用以下查询来实现它

select u.id, 
u.name, m.roleId, r.name FROM User u left outer join UserRole m ON u.id = m.userId 
inner join Roles r ON m.roleId = r.id  
order by u.id;
Run Code Online (Sandbox Code Playgroud)

我正在为用户做左外连接,因为有一些用户没有关联角色.我不喜欢使用本机SQL,因为它有自己的缺点.有人可以帮我映射相应的HQL或JPQL查询吗?

Ale*_*lex 5

试试这个查询

select u from User u left join fetch u.roles
Run Code Online (Sandbox Code Playgroud)