我在检索“文件夹层次结构”类型的父/子关系时遇到一个问题理想情况下,在普通的 Oracle SQL 中,使用 CONNECT BY 子句很容易。但是对于 Hibernate,由于某种原因,它最终会出现双“左外连接”父对子和子对父。
问题:当休眠拉出“仪表板”文件夹的对象在“卡特斯产品”含义中检索时,它确实拉出父/子,但随后它也将相同的子文件夹附加到仪表板!。
这是更多信息,我只在以下代码片段中输入了关系。表:
DASHBOARD {
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(100) ...
}
FOLDER {
ID INTEGER PRIMARY KEY,
DASHBOARD_ID INTEGER,
NAME VARCHAR2(100),
PARENT_FOLDER_ID INTEGER .....
}
public class DashBoard{
....
....
@OneToMany(mappedBy = "dashboard", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OrderBy("NAME ASC")
@Sort(type = SortType.NATURAL)
public SortedSet<Folder> getFolders() {
return folders;
}
}
public class Folder{
....
....
@ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "DASHBOARD_ID", nullable = false)
public DashBoard getDashBoard() {
return dashboard;
}
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OrderBy("NAME ASC")
@Sort(type = SortType.NATURAL)
public SortedSet<Folder> getChildFolders() {
return folders;
}
@ManyToOne(fetch = FetchType.EAGER, optional = true, cascade = CascadeType.ALL)
@JoinColumn(name = "PARENT_FOLDER_ID")
public Criterion getParent() {
return parent;
}
}