У меня есть бизнес-требование, мне нужно реализовать древовидную структуру, которая моделируется следующим образом:
Folder 1 (Type Folder.class)
-- Folder 1.1 (Type Folder.class)
-- Folder 1.1.1 (Type Folder.class)
-- Item 1A (Type Item.class)
-- Item 1B (Type Item.class)
-- Folder 1.1.2 (Type Folder.class)
-- Item 2A (Type Item.class)
-- Item 2B (Type Item.class)
У меня есть две сущности, Folder.java
и Item.java
следующим образом
Folder.java
@Entity
public class Folder{
@Id
private Long id;
private String name;
//...other fields...//
@ManyToOne
@JoinColumn(name="PARENT_FOLDER_ID")
private Folder parentFolder;
//... Getters and Setters...//
}
и Item.java
@Entity
public class Item{
@Id
private Long id;
private String name;
//...other fields...//
@ManyToOne
@JoinColumn(name="PARENT_FOLDER_ID")
private Folder parentFolder;
//... Getters and Setters...//
}
Я могу создавать объекты Item
и Folder
согласно иерархии, показанной выше, ивозможность сохранить их в базе данных.Итак, все операции CRUD работают нормально.
Мое требование сейчас таково, что я должен иметь возможность получить List<Item>
при заданном Folder
в качестве ввода, согласно приведенной ниже таблице:
Сценарий 1: Когда ввод Folder 1.1.1
, вывод должен быть Item 1A
, Item 1B
.
Сценарий 2: Когда вводFolder 1.1
, выходной сигнал должен быть Item 1A
, Item 1B
, Item 2A
, Item 2B
Сценарий 2: Когда входной сигнал равен Folder 1
, выходной сигнал должен бытьItem 1A
, Item 1B
, Item 2A
, Item 2B
Мне удалось выполнить Сценарий 1 с использованием JPA hiberante Query by example
(set item.setParentFolder()
) для установкиродительской папки, и я получаю список всех элементов в этой папке.
Но как я могу это сделать, если у родителя нет прямых Item
с, но у их дочерних папок есть?
Спасибо, Шрирам Шридхарен