回答

收藏

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

技术问答 技术问答 208 人阅读 | 0 人回复 | 2023-09-14

我在用户和角色之间有很多关系。例如
" A, K% D4 a# \8 [- J+ D3 Gpublic class User {
% e6 f2 z9 G" L/ z+ H- _   @Id
4 e# Q4 q2 u" k7 H' F' R   private Integer id;, ?: [6 [9 b4 X; W) }
   @ManyToMany
) o2 L7 d$ m( u" R! ^   @JoinTable(name = "APP_USER_ROLE", 3 U" ~* X, C  e& o2 L  a1 K
     joinColumns = { @JoinColumn(name = "USER_ID") },
4 T# W+ l, a: `$ R: u     inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
* B# U( F: z! r% a6 I! Y   private List roles = new ArrayList();" g% d! g$ y' m3 ^; P5 @
}
/ [, M7 G; a  ]( T, h/ f; l- f. x@Entity     
3 v: J0 X$ e" q' F5 ~7 t, N0 Jpublic class Role {
% X$ h% J+ O9 P& S$ A. P8 s  @Id2 x* s: B' m& ?/ d5 [
  private Integer id;) r0 i* I* a) m* X7 u  O& f
  @ManyToMany(mappedBy = "roles")
- F! A, [- ?) Z" _+ R: e  private List[U] users = new ArrayList[U]();
4 Q  H6 }5 O, O! b}+ p( |0 x4 }; \/ Q( s
我的要求是获取系统中所有具有其角色的用户。当使用HQL使用我的查询是6 C/ E8 P+ l6 Y+ g9 U$ v, T
select u, u.roles from User u
( X! x& n) F9 p( K$ x但是,这会触发具有相应角色的每个用户的查询。如果有100个用户,它将触发100个查询。但是在SQL中,我可以使用以下查询来实现
9 W7 u5 p9 j3 M2 g9 ^$ M5 jselect u.id,
; A, s  W  e# P3 S8 ~4 R) N1 `u.name, m.roleId, r.name FROM User u left outer join UserRole m ON u.id = m.userId $ g, @0 x6 x9 J1 j, }9 M
inner join Roles r ON m.roleId = r.id  ( G( g, O& k* [9 Z. ?- j
order by u.id;
8 H  Z" i/ |  M/ N9 }2 U3 X" ?我正在为用户进行左外部联接,因为有些用户没有关联的角色。我宁愿不使用本机SQL,因为它有其自身的缺点。有人可以帮我映射相应的HQL或JPQL查询吗?
( d) @  L, i% u               
) \# @1 [& ?# Y  e8 E解决方案:7 R% J/ d# l* N8 W
                  Q$ \: y! F0 P
* N4 y' g! R9 I8 y. Q
! j' F! Z; }  C1 J" N
                试试这个查询
; i5 t& a4 d# ]. w) tselect u from User u left join fetch u.roles
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则