我在User和Roles之间有很多关系。例如
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>();
}
我的要求是使用他们的角色获取系统中的所有用户。使用HQL时,我的查询是
select u, u.roles from User u
然而,这会为具有相应角色的每个用户触发查询。如果有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;
我正在为用户做左外连接,因为有一些用户没有关联角色。我不喜欢使用本机SQL,因为它有自己的缺点。有人可以帮我映射相应的HQL或JPQL查询吗?
答案 0 :(得分:5)
尝试此查询
select u from User u left join fetch u.roles