2014-04-04 38 views
0
@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去無限遞歸..我使用Jackson。 我需要在我的json輸出中也有父ID。如何JSON一個休眠樹節點

回答

0

如果能力實體指向一個組,那麼你可能確實進入無限遞歸。您可以在父和子實例變量上放置一個@JsonIgnore註釋,以忽略它們包含在JSON中,或者可以使用@JsonBackReference/@JsonManagedReference的組合,如另一張海報所示。

你可以做的其他事情是創建一個pojo,它包含你在服務層中感興趣的所有屬性,將休眠連接切割出圖片。類似的東西:

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/

http://martinfowler.com/eaaDev/PresentationModel.html

1

設置在@ManyToOne財產@JsonBackReference@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

評論:給一個代碼示例,請。即使它是正確的,這也是一個低質量的答案。 – ElmoVanKielmo