Есть ли способ создавать списки объединенных объектов в запросах JPA?JAVA

Программисты JAVA общаются здесь
Anonymous
Есть ли способ создавать списки объединенных объектов в запросах JPA?

Сообщение Anonymous »

В моей базе данных есть следующие объекты:

Код: Выделить всё

@Getter
@Entity
class TopLevel {
@Column
String name;
@OneToMany
List subtypes;
}

@Getter
@Entity
class SubTypeOne {
@ManyToOne()
SubTypeTwo property
}

@Getter
@Entity
class SubTypeTwo {
@Column
int finalProperty
}
У меня есть DTO, который выглядит следующим образом:

Код: Выделить всё

record TopLevelDto(String name, Collection subTypeTwoProperties) {}
Я хотел бы создать объект DTO непосредственно из запроса JPA с использованием JPQL. Прямо сейчас я могу эффективно создавать необходимые объекты, используя следующий код:

Код: Выделить всё

String query = """
SELECT t
FROM TopLevel t
LEFT JOIN FETCH t.subtypes st
LEFT JOIN FETCH st.property
"""
// code to get TopLevel Object from query omitted
TopLevel t = ??
List subTypeTwoProperties = t.getSubtypes().stream()
.map(s -> s.getProperty().getFinalProperty())
.toList();
TopLevelDto dto = new TopLevelDto(t.getName(), subTypeTwoProperties);
Есть ли способ сделать все это только внутри самого запроса JPQL?
Я ожидаю, что функция или какой-либо другой механизм преобразует объект st в запросе в список. Например, я называю это Collect_list здесь:

Код: Выделить всё

String query = """
SELECT new TopLevelDto(t.name, collect_list(st.property))
FROM TopLevel t
LEFT JOIN FETCH t.subtypes st
LEFT JOIN FETCH st.property
"""
Существует ли что-то подобное или альтернатива?

Подробнее здесь: https://stackoverflow.com/questions/793 ... pa-queries

Вернуться в «JAVA»