Spring Boot - фильтрация дерева по имени в разделах и элементах - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно отфильтровать дерево с такой структурой:

  • Раздел
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;
...
}

Хорошо, теперь я хочу отфильтровать дерево по текст. Этот текст должен быть проверен для всех вводящих поле:

  1. Section.name
  2. SomeObject.name

Как я могу сделать это с наименьшим количеством времени и наименьшим количеством запросов. Вывод должен быть в форме дерева Разделов без потери структуры?

Я получил и отфильтровал секции и элементы в root, используя repository но затем вам нужно загрузить все дерево, получить его элементы и отфильтровать их по имени, что очень дорого для большого дерева. Также была возможность сделать все одним запросом в Postgresql с использованием WITH RECURSIVE и построить наше дерево. Но есть трудности с проверкой прав и ролей ...

...