- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了避免无限递归,我使用 @JsonManagedReference 和 @JsonBackReference 。但是在检索结果时,我只能以一种方式获得预期结果。
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="THIRD_TABLE",
joinColumns={@JoinColumn(name="STUDENT_ID")},
inverseJoinColumns={@JoinColumn(name="TEACHER_ID")})
@JsonManagedReference
private Set<Teacher> teachers = new HashSet<>();
-----------
@ManyToMany(mappedBy="teachers")
@JsonBackReference
private Set<Student> winners = new HashSet<>();
按学生计算教师数可以很好,但按教师计算学生数则行不通。 JsonBackReference 可以防止这种情况发生。
是否可以在一个字段上同时使用两个注释并使其以两种方式工作。
最佳答案
如果您只想避免递归,可以使用@JsonIdentityInfo。它会为每个对象生成id,如果重复则用id替换重复的对象。
这是一个简单的父/子示例:
@JsonIdentityInfo(generator=IntSequenceGenerator.class)
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class Parent {
private List<Child> children=new ArrayList<>();
private String name="parent";
public Parent() {
super();
children.add(new Child(this,"foo"));
children.add(new Child(this,"bar"));
}
public List<Child> getChildren() {
return children;
}
}
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class Child {
private Parent parent;
private String pseudo="toto";
public Child(Parent parent, String pseudo) {
super();
this.parent = parent;
this.pseudo = pseudo;
}
}
public class SOJson {
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
Parent object=new Parent();
String json1 = objectMapper.writeValueAsString( object);
System.out.println("write parent: "+json1);
String json2 = objectMapper.writeValueAsString(object.getChildren().get(0));
System.out.println("write child: "+json2);
}
}
结果:
write parent: {"@id":1,"children":[{"parent":1,"pseudo":"foo"},{"parent":1,"pseudo":"bar"}],"name":"parent"}
write child: {"parent":{"@id":1,"children":[{"parent":1,"pseudo":"foo"},{"parent":1,"pseudo":"bar"}],"name":"parent"},"pseudo":"foo"}
您会看到子级和父级之间存在递归,如果删除@JsonIdentityInfo,您将出现堆栈溢出。
当然,您需要在某个地方停止递归,否则您将转储所有数据库!使用 @jsonIgnore 在某处停止递归,或使用 Hibernate4Module 在卸载的惰性属性上停止递归。 (我更喜欢两者都使用)
关于java - Hibernate 多对多双向 - 双向 @JsonManagedReference 和 @JsonBackReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42650385/
我有来自用户和角色的关系,其中角色具有“一对多”关系,而用户与“role_id”列具有“多对一”关系 当我在 Spring Boot 上使用关系时,当我使用 @OneToMany 和 @ManyToO
我正在使用 spring 4.0.1、hibernate 4.3.5、jackson 1.9.2 和 STS IDE我正在创建一个以 JSON 格式返回数据的 RESTful 网络服务当我使用 Hib
我对 JSON 的了解有限,因此希望您能为我指出正确的方向。 我正在尝试发布一个对象(库),但这会由于无限递归而引发异常 public class Library{ private List
我想知道Jackson中@JsonManagedReference和@JsonBackReference的区别? 最佳答案 @JsonManagedReference is the forward p
我正在使用 RestEasy、Jboss 7 和 EJB 3.1。我正在创建一个以 JSON 格式返回数据的 RESTful Web 服务。 问题是我有一个 @ManyToOne在序列化过程中导致无限
我有两个类: 人.java: @Entity @PrimaryKeyJoinColumn(name="owner_id") public class Person extends Owner {
非常感谢您解释我的问题。 我有 2 个实体和 1 个桥接表实体, 假设他们是团队、用户和团队用户。 团队实体: @Id @GeneratedValue(strategy = Gener
非常感谢您解释我的问题。 我有 2 个实体和 1 个桥接表实体, 假设他们是团队、用户和团队用户。 团队实体: @Id @GeneratedValue(strategy = Gener
回答 我将解决有关此博客的问题 Jackson – Bidirectional Relationships 谢谢你。 更新2 问题与 JsonBackReference 和 JsonManagedRe
在我的 Spring Data Rest 应用程序中,定义 excerptProjection 时,@JsonBackReference 将被忽略。 调用 GET/foos/{id} 时,我得到响应:
我知道@JsonIgnore和@JsonManagedReference,@JsonBackReference都是用来解决无限递归(StackOverflowError)的 code>,这两者有什么区
为了避免无限递归,我使用 @JsonManagedReference 和 @JsonBackReference 。但是在检索结果时,我只能以一种方式获得预期结果。 @ManyToMany(ca
我正在使用 Spring Boot 编写 OneToMany 关系,一个属性可以有多个 propertySale。 这是我的属性类: @Data @Getter @Entity @Table(name
我读过了 http://vard-lokkur.blogspot.com/2010/10/json-jackson-to-rescue.html http://vard-lokkur.blogspot
我是一名优秀的程序员,十分优秀!