SpringBoot JPA @OneToOne @OneToMany @ManyToOne @ManyToMany

其中Role與Menu多對多


實體關(guān)系圖.png
public class User implements Serializable {
    @Id
    private Long id;

    private String name;

    private String password;

    private String phone;

    private Integer age;

    @Column(name = "role_id")
    private String roleId;

    @OneToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    @JoinColumn(name = "role_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Role role;

    @OneToMany(mappedBy = "user",cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private List<LoginLog> loginLogList;
}
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
public class Role implements Serializable {
    @Id
    private Long id;

    private String name;

    private Long sort;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "sys_role_menu", joinColumns = {@JoinColumn(name = "roleId", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "menuId", referencedColumnName = "id")})
    private List<Menu> menuList;
}
public class Menu {
    @Id
    private Long id;

    private String name;

    private String url;

    private String icon;
}
public class RoleMenu {
    @Id
    private Long Id;

    private Long RoleId;

    private Long MenuId;

}
public class LoginLog implements Serializable {
    @Id
    private Long id;

    private String userId;

    private String log;

    private Date createTime;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "userId",insertable = false,updatable = false)
    private User user;

}

User和LoginLog配置了雙向關(guān)聯(lián),使用中很容易造成循環(huán)引用問題,防止這種問題,網(wǎng)上一般做法是加上
@JsonIgnore注解,其實使用中可以不加此注解,而是盡量避免循環(huán)調(diào)用getUser(),getLoginLogList()方法。
直接將查詢出來的實體類進(jìn)行json序列化時,懶加載被激活,getUser()等被調(diào)用,此時會造成循環(huán)引用問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容