0

我在检索“文件夹层次结构”类型的父/子关系时遇到一个问题理想情况下,在普通的 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;
}
}
4

1 回答 1

0

我已经删除了 DashBoard --> 文件夹的关系,并由 DAO 层手动维护它。这解决了hibernate cartisian join问题。我仍然认为可能有比这更好的解决方案,请告诉我。

谢谢,

于 2011-12-29T22:25:32.970 回答