【问题标题】:JPA with Hibernate - Many to Many relationship, fetching all dataJPA with Hibernate - 多对多关系,获取所有数据
【发布时间】:2014-12-09 02:12:52
【问题描述】:

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

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

【问题讨论】:

    标签: sql hibernate jpa many-to-many hql


    【解决方案1】:

    试试这个查询

    select u from User u left join fetch u.roles
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      相关资源
      最近更新 更多