@Entity
public class Group{
@Id
@GeneratedValue
private Long id;
@ManyToOne
private Group parent;
@LazyCollection(value=LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "parent")
@Cascade(value = {CascadeType.ALL})
private Set<Group> children = new HashSet<Group>();
}
我如何构建JSON? Json进行无限递归..我正在使用杰克逊。 我需要在我的json输出中有父ID。
答案 0 :(得分:1)
在@JsonBackReference
媒体资源上设置@ManyToOne
,在@JsonManagedReference
媒体资源上设置@OneToMany
@Entity
public class Group{
@Id
@GeneratedValue
private Long id;
@JsonBackReference
@ManyToOne
private Group parent;
@JsonManagedReference
@LazyCollection(value=LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "parent")
@Cascade(value = {CascadeType.ALL})
private Set<Group> children = new HashSet<Group>();
}
答案 1 :(得分:0)
如果Competency实体指向一个Group,那么您可能确实会进入无限递归。您可以在父实例变量和子实例变量上放置@JsonIgnore
注释以忽略它们包含在JSON中,或者您可以使用@JsonBackReference
/ @JsonManagedReference
的组合作为另一个海报建议。
您可以做的其他事情是创建一个pojo,其中包含您在服务层中感兴趣的所有属性,从而将hibernate连接从图片中删除。这样的事情:
public class GroupDto {
private Long id;
private CompetencyDto parent;
private List<CompetencyDto> children;
}
public class CompetencyDto {
private Long id;
}
这虽然看似过度工作,但会让您的演示模型不依赖于您的域模型。在构建视图时,这将为您提供更大的灵活性:
http://codebetter.com/jpboodhoo/2007/09/27/screen-bound-dto-s/