आप संबंध को द्वि-दिशात्मक बनाकर और पेड़ पर चलने के लिए एक पुनरावर्ती विधि लिखकर डोमेन मॉडल में इसे संभाल सकते हैं। इसका एक फायदा यह है कि यह बच्चों को किसी भी स्तर पर संभाल लेगा।
यह नीचे जैसा कुछ दिखाई देगा और फिर किसी भी उदाहरण के लिए आप यह कर सकते हैं:
SomeEntity e = //;
e.getChildren(); //only direct children
e.getAllChildren(); //all children
इकाई:
@Entity
@Table(name = "some_entity")
public final class SomeEntity {
@Column(nullable = false, unique = true, length = 20)
private String externalId;
@Column(nullable = false, length = 50)
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parentId", nullable = true)
private SomeEntity parent;
@OneToMany(mappedBy = "parent")
private List<SomeEntity> children; //or Set<>
//returns direct children
public List<SomeEntity> getChildren(){
return children;
}
//returns all children to any level
public List<SomeEntity> getAllChildren(){
getAllChildren(this);
}
//recursive function to walk the tree
private List<SomeEntity> getAllChildren(SomeEntity parent){
List<SomeEntity> allChidren = new ArrayList<>();
for(SomeEntity child : children){
allChildren.add(child);
allChildren.addAll(getAllChildren(child);
}
return allChildren;
}
}