我有用戶有角色和用戶有一個組,也可以有角色。我需要一種簡單的方法來獲得用戶直接或間接的所有角色。JPA兩個實體使用相同@JoinTable
我想是這樣的:
@Entity
@Table(name = "USER")
public class User{
@Id
private Integer id;
@OneToMany
@JoinTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "ROLE_ID") )
private List<Roles> roles;
@ManyToOne
private List<Group> group;
}
@Entity
@Table(name = "GROUP")
public class Group{
@Id
private Integer id;
@OneToMany
@JoinTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "GROUP_ID"),
inverseJoinColumns = @JoinColumn(name = "ROLE_ID") )
private List<Roles> roles;
}
@Entity
@Table(name = "ROLE")
public class Role{
@Id
private Integer id;
@Column
private String name;
}
...但這樣一來,我需要兩個步驟:首先,我可以得到直接的角色,然後間接角色,我需要合併兩個集合。有沒有更簡單或更方便的方法?
從SQL它會很容易這樣做:
USER USER_ROLES ROLE
---- ---------- ----
ID USER_ID ID
GROUP_ID GROUP_ID NAME
ROLE_ID
SELECT *
FROM USER u
JOIN USER_ROLES u_r ON (u.ID = u_r.USER_ID)
JOIN USER_ROLES g_r (u.GROUP_ID = u_r.GROUP_ID);
您提到,從SQL中很容易,但這基本上是一個查詢。你可以用JPQL做同樣的事情。但是你不能以這種方式構建表,所以你不能以這種方式構建你的實體。想象一下現在從實體生成表格的過程。 – JMelnik