У меня есть одна проблема с поиском отношения Родитель / Дочерний типа "Иерархия папок". В идеале, в простом Oracle SQL было бы легко использовать предложение CONNECT BY.Но в Hibernate по какой-то причине он заканчивается двойным «LEFT OUTER JOIN» Родитель-ребёнок и Дочерний-родительский.
Проблема: Когда hibernate тянет Объект папки «Панель инструментов» извлекается в«Картезианский продукт» Это означает, что он действительно вытаскивает родительский / дочерний элемент, но затем он также присоединяет те же дочерние папки к 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;
}
}