带有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 |
|
|
|
|
|