У меня есть одна проблема с получением отношения Родитель/Дочерний тип "Иерархия папок". В идеале, в простом Oracle SQL было бы легко использовать предложение CONNECT BY. Но с Hibernate по какой-то причине он заканчивается двойным "LEFT OUTER JOIN" Parent to Child и Child to Parent.
Проблема: когда hibernate извлекает объект папки «Dashboard» извлекается в «Cartersian product». Это означает, что он извлекает родительские/дочерние папки, но затем также прикрепляет те же дочерние папки к Dashboard!.
Вот дополнительная информация, я ТОЛЬКО типизированные отношения в следующем фрагменте кода. Таблицы:
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;
}
}