JPA Hibernate:如何跨多个级别查询与父级类型相同的子级实体

时间:2019-04-15 12:47:03

标签: java hibernate jpa

我有一个业务需求,我需要实现一个树形结构,其建模如下:

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.javaItem.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...//
}

我能够按照上面显示的层次结构创建ItemFolder对象,并将它们持久化到数据库中。因此,所有CRUD操作都可以正常工作。

现在我的要求是,根据下表,当输入List<Item>时,我必须能够获得Folder

方案1::当输入为Folder 1.1.1时,输出应为Item 1AItem 1B

方案2:当输入为Folder 1.1时,输出应为Item 1AItem 1BItem 2AItem 2B

方案2:当输入为Folder 1时,输出应为Item 1AItem 1BItem 2AItem 2B

我已经能够使用JPA hiberante的Query by example(设置item.setParentFolder())设置父文件夹来完成方案1 ,然后我得到了该文件夹下所有项目的列表文件夹。

但是当父级没有直接Item却有子级文件夹的情况下,我该怎么办呢?

谢谢, 斯里拉姆·斯里达兰(Sriram Sridharan)

0 个答案:

没有答案