Как я могу получить частичный результат от самоссылающейся сущности, которая имеет отношения пара родитель-потомок?
Я пытался получить целые объекты и затем преобразовать их в частичный объект.
Я также попробовал FetchGroup, выбрать частичные столбцы и другие.
Но ни один из них не работал. Когда он получает дочерние элементы, весь объект изменяется, чтобы привести всю сущность.
@Entity
public class someClass extents Model {
public String name;
public String code;
@ManyToOne
@JsonBackReference
public Menu parent;
@OneToMany(mappedBy = "parent")
@JsonManagedReference
public Set<someClass> children;
other columns and getters/setters.
}
Вот искатель, которым я пользуюсь
public static List<someClass> findInTree() {
find
.query()
.where()
.isNull("parent")
.findList();
}
и я вижу запущенные запросы
[info] o.j.StatementLogger - select t0.id, t0.code, t0.name from some_entity t0 where t0.parent_id is null and t0.is_active = Y and to_timestamp('2019-04-04 19:05:54.333', 'yyyy-MM-dd hh24:mi:ss.ff3') between t0.start_date and t0.end_date ;
[info] o.j.StatementLogger - select t0.parent_id, t0.id from some_entity t0 where (t0.parent_id) in (1, 2, 3, 4, 1 ) ;
[info] o.j.StatementLogger - select t0.id, t0.code, t0.name from some_entity t0 where t0.id in (5, 6, 5, 5, 5 ) ;
[info] o.j.StatementLogger - select t0.parent_id, t0.id from some_entity t0 where (t0.parent_id) in (5, 6, 5, 5, 5 ) ;
[info] o.j.StatementLogger - select t0.id, t0.code, t0.name from some_entity t0 where t0.id in (7, 8, 7, 7, 7 ) ;
[info] o.j.StatementLogger - select t0.parent_id, t0.id from some_entity t0 where (t0.parent_id) in (7, 8, 7, 7, 7 ) ;
и результат был
"someClass":[
{
"id":1,
"code":"test1",
"name":"test1",
"children":[
],
... rest of columns
},
...
{
"id":4,
"code":"test1",
"name":"test1",
"children":[
{
"id":5,
"code":"test1",
"name":"test1",
"children":[
{
"id":7,
"code":"test1",
"name":"test1",
"children":[
],
},
... rest of columns
],
... rest of columns
},
...
]
Я беспокоюсь о том, что рекурсивные запросы потребляют слишком много ресурсов, когда они становятся больше.
А также, я хочу применить эту практику к другим сущностям, которые имеют разные отношения.
Ожидаемый результат выглядит следующим образом.
"someClass":[
{
"id":1,
"code":"test1",
"name":"test1",
"children":null,
},
...
{
"id":4,
"code":"test1",
"name":"test1",
"children":[
{
"id":5,
"code":"test1",
"name":"test1",
"children":[
{
"id":7,
"code":"test1",
"name":"test1",
"children":null,
},
],
},
...
]
Я хочу удалить все ненужные данные из результата и, надеюсь, сократить число извлекаемых сопоставленных запросов для оптимизации.
Есть ли лучшие практики или примеры, которые я могу найти?
С наилучшими пожеланиями.