我有一个业务需求,我需要实现一个树形结构,其建模如下:
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
我已经能够使用JPA hiberante的Query by example
(设置item.setParentFolder()
)设置父文件夹来完成方案1 ,然后我得到了该文件夹下所有项目的列表文件夹。
但是当父级没有直接Item
却有子级文件夹的情况下,我该怎么办呢?
谢谢, 斯里拉姆·斯里达兰(Sriram Sridharan)