17.JPA双向死循环解决方法
jpa
有数据结构映射,如: 一对多,或一对多等。但是一个模型依赖另个模型后,另一个模型又依赖回来,就会产生双向无限循环的依赖关系,如:一个管事员
拥有一家店,而一家店拥有一个管理员,而管理员又拥有一家店,就变成了: 管理员 -> 门店 -> 管理员 -> 门店... 这样无限嵌套的关系,这样把数据转换
成json
时,是不可能的。所以需要中断这样的循环关系。
1 @JsonIgnoreProperties 忽略属性下的属性
@JsonIgnoreProperties
标记在属性时,声明该属性在转变为json
时,忽略哪个属性如
public class Store {
// ...
@OneToOne(mappedBy = "store")
@JsonIgnoreProperties({"store"}) // 声明 admin 属性中的store忽略
private User admin;
// ...
}
public class User {
// ...
@OneToOne(cascade = CascadeType.ALL)
private Store store;
// ...
}
2 @JsonIgnore 忽略被标记的属性
相较对@JsonIgnoreProperties
@JsonIgnore
则是直接标记于本地的属性,标记哪里,哪里就会被忽略, 如:
public class User {
// ...
@JsonIgnore
private String password;
@OneToOne(cascade = CascadeType.ALL)
private Store store;
// ...
}