猿问

Spring Data Jpa 多对多之查询问题?

大家好,最近在学习Spring Data Jpa,遇到关于多对多中的问题,想请教大家

我们都知道 用户-角色-权限 是用户-角色多对多  角色-权限多对多如此便有以下实体类:

/**
 * 描述:用户实体
 * @author itbofeng bf1020070755@163.com
 */
@Data
@Entity
public class User implements Serializable {
    @Id
    @Column(length = 64, nullable = false)
    private String uid;//用户ID 主键 64位
    @Column(length = 64, nullable = false)
    private String uname;//用户名 非空 64位
    @Column(length = 64, nullable = false)
    private String username;//登录名 非空 64位
    @Column(length = 64, nullable = false)
    private String password;//密码 非空 64位
    @Column(length = 64, nullable = true)
    private String email;//邮箱 可空 64位
    @Column(length = 64, nullable = true)
    private String phone;//电话 可空 64位
    @Column(length = 1, nullable = true)
    private String state;//电话 可空 64位
    @ManyToMany(cascade = CascadeType.ALL ,fetch = FetchType.EAGER)
    @JoinTable(name = "UserRole", joinColumns = {
    @JoinColumn(name = "uid", referencedColumnName = "uid")}, inverseJoinColumns = {
    @JoinColumn(name = "rid", referencedColumnName = "rid")})
    protected List<Role> roles;
}

/**
 * 描述:角色实体
 * @author itbofeng bf1020070755@163.com
 */
@Data
@Entity
public class Role implements Serializable {
    @Id
    @Column(length = 64)
    private String rid;//角色ID 主键 64位
    @Column(length = 64,nullable = false)
    private String rname;//角色名称 主键 64位
    @ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
    private List<User> users;
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "RolePermission", joinColumns = {
            @JoinColumn(name = "rid", referencedColumnName = "rid")}, inverseJoinColumns = {
            @JoinColumn(name = "pid", referencedColumnName = "pid")})
    private List<Permission> permissions;
}
/**
 * 描述:权限实体
 * @author itbofeng bf1020070755@163.com
 */
@Data
@Entity
public class Permission implements Serializable {
    @Id
    @Column(length = 64)
    private String pid;//权限ID 64位
    @Column(length = 64,nullable = false)
    private String pname;//权限名称 64位
    @Column(length = 1,nullable = false)
    private String type;//权限类别,0菜单,1按钮 1位
    @Column(length = 256,nullable = true)
    private String url;//对应菜单  256位
    @Column(length = 64)
    private String parentId;//权限ID 64位
    @ManyToMany(mappedBy = "permissions" ,fetch = FetchType.LAZY)
    private List<Role> roles;
}

现有需求:根据用户名查询出用户的所有信息,包括角色以及角色拥有的权限,用Spring Data Jpa怎么实现呢?

我最初的想法是,先查询出用户,再根据用户ID查询出所有的角色,再根据所有的角色ID查询出所有的权限,然后将角色和权限对应一下就OK了,做到这一步了,忽然发现没有什么字段可以对应?请问各路大神都是怎么操作的呢?


泥巴先生
浏览 3358回答 1
1回答

泥巴先生

可以用sql语句

慕设计2395807

LLVFIWSGMTSJMSCMMGNDUBVHRJDUNUUVCZPZPCTZTDPGSIBCMZWNOULGTTAGHXRISZCPJJOFYFMWNTGPQDKNALISZSIBEELPJTKYEOOBIVSSJLZWVMPTMDKARLZGWTANAHYFTZJAEVGUKLLPLLMJDQXXHMNBBLIMFMDYCIVFVULLRMWZSOYIVCYEKLOEKKKEVBOFSMKQGHERBYVFIEBFGJAEEVJDCOYYMWHUVFPCLRISIMSZAJERXORSYIJGJNQQADXKXZKXGKGXKUEUJQHQNKKUTMTURRRMZTQAHYULBDGZIFYVIFFMFBRSVANUNYEYRKEBCXDARIAGAUOYYSIJJMPHHOHHEBGXHJTUNPTAXNFXQDDSJDJQAHORBRDUHOETABENXVNQRLVWADKKNEROXNUVRHOFFIPQKABUULIICCFFWZMGQTKDARRSFBBCVMPOVLSZCCCFTGTWFPBYOOIPBSSMTXNHHVLSZGWDHSCPJGTTAABXMYFSWPGWNXKDKRANABHRYREEERONDEULVIHBVFJZQBCCFCZMCZRNXETQOVLVFMIPZATDNHHCPGQGWPVWGGNCIPMADDNRRURVLCOBYOTNXOELMNPMWZQKQNWWDPZGDDAXEEFGAABEFIPSCJTPMUYORYPGMNZPQACFCZQEDQWWTUNEUEVVIYFSVIPWUBTMJBEVYFMTUPCSTMFYFCDENAAQNOYOBMCKXWDREQBSCTRTJAUXULSSUMGTURHBRYZTRNMQWXAROVLEHKLYEDTXNOSIIIFCWWVXXEBABEIKBISJPEOEIYIPWNUIPGNAOUREPGNGGSMPSZAQSRVUVSCIPFGNVIOEYNAQHHOUQQHUVQHHOOZMMMTWMDWWDCYLLFCCTAGN
随时随地看视频慕课网APP

相关分类

Java
我要回答