Skip to main content

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;

// ...
}