sql之JPA with Hibernate之多对多关系,获取所有数据

mengfanrong 阅读:61 2025-06-02 22:19:02 评论:0

我在用户和角色之间有多对多的关系。例如

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 查询吗?

请您参考如下方法:

试试这个查询

select u from User u left join fetch u.roles 


标签:hibernate
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号