У меня есть объект, который имеет простые столбцы String, а также множество ElementCollections (List и Map). Я заметил, просматривая мои журналы postgres, что PostGres при запросе этой сущности последовательно выполняет несколько запросов SELECT, чтобы получить все ElementCollections.
Для эффективности, я думаю, было бы лучше сделать один запрос SELECT с некоторыми внутренними соединениями, чтобы избежать всех отдельных запросов SELECT. Есть ли способ сделать это без написания очень подробного запроса на выборку вручную со всеми ВНУТРЕННИМИ СОЕДИНЕНИЯМИ?
Я искал FetchTypes и язык Spring QueryData, а также DTO Projection, но думаю, что может быть более простой способ. Преимущество, которое я воспринимал как должное, заключается в явном выполнении JOIN, если я добавлю новое поле, тогда мне придется постоянно обновлять свой запрос, а если Spring генерирует запросы для меня, то мне не нужно ничего делать.
// Person.java
@Entity
public Person {
@Id
long personId;
@Column
String firstName;
@Column
String lastName;
@ElementCollections
Set<String> someField;
@ElementCollections
Map<String, String> otherField;
@ElementCollections
Set<String> anotherField;
@ElementCollections
Map<String, String> yetAnotherField;
}
То, что сейчас происходит, это
SELECT firstName, lastName FROM Person WHERE personId=$1
SELECT someField FROM Person_SomeField WHERE someField.personId=$1
SELECT otherField.key otherField.value FROM Person_OtherField WHERE otherField.personId=$1
И это продолжается для всех таблиц ElementCollections, что приводит к большому количеству запросов.