JPA Hibernate: как запросить дочерние объекты одного типа с родительским на нескольких уровнях - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть бизнес-требование, мне нужно реализовать древовидную структуру, которая моделируется следующим образом:

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 с, но у их дочерних папок есть?

Спасибо, Шрирам Шридхарен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...