其中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)引用問題。