Мне нужно отфильтровать дерево с такой структурой:
public class Section {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotBlank(message = "is.empty")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent", referencedColumnName = "id", updatable = false, insertable=false)})
@Setter(AccessLevel.NONE)
private Section parent;
@Column(name = "parent")
@Setter(AccessLevel.NONE)
private Long parentId;
@OrderBy("name")
@OneToMany(mappedBy = "parent")
private List<Section> sections = new ArrayList<>();
@OneToMany(mappedBy = "section")
private List<Item> items = new ArrayList<>();
...
public class Item {
... @ID ...
@JoinColumn(name = "code_name", referencedColumnName = "code_name", insertable = false,updatable = false)
})
@Setter(AccessLevel.NONE)
private SomeObject someObject;
@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name = "section", referencedColumnName = "id", insertable = false, updatable=false)})
@Setter(AccessLevel.NONE)
private Section section;
@Column(name = "section")
@Setter(AccessLevel.NONE)
private Long sectionId;
- Мой класс SomeObject содержит имя поля
public class SomeObject {
...
private String name;
...
}
Хорошо, теперь я хочу отфильтровать дерево по текст. Этот текст должен быть проверен для всех вводящих поле:
Section.name
SomeObject.name
Как я могу сделать это с наименьшим количеством времени и наименьшим количеством запросов. Вывод должен быть в форме дерева Разделов без потери структуры?
Я получил и отфильтровал секции и элементы в root, используя repository
но затем вам нужно загрузить все дерево, получить его элементы и отфильтровать их по имени, что очень дорого для большого дерева. Также была возможность сделать все одним запросом в Postgresql с использованием WITH RECURSIVE
и построить наше дерево. Но есть трудности с проверкой прав и ролей ...