Я бы хотел оптимизировать запрос dataDSL + Spring.В настоящее время я использую BooleanBuilder в качестве предиката, что было бы хорошо, но он объединяет слишком много таблиц.Мне не нужны все столбцы из таблиц, и мне не нужны некоторые таблицы вообще.Я считаю, что использование проекции уменьшит количество объединяемых таблиц.
Я пробовал использовать Projection.bean (), а также расширить MappingProjection, но оба подхода приводят к тому, что не используются объединения, а выбирается из нескольких таблиц, что приводит кв меньшем количестве строк, чем необходимо.
Моя структура данных состоит из сущности Booking и некоторых связанных объектов, таких как User, поэтому выглядит примерно так:
@Entity
public class Booking {
@ManyToOne
@JoinColumn(name = "userId", nullable = false)
private User endUser;
}
@Entity
public class User {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "endUser", fetch = FetchType.LAZY)
private List<Booking> bookings;
}
Я реализовал собственную проекцию queryDSLрепозиторий, как описано здесь: Spring Data JPA и Querydsl для выборки подмножества столбцов с использованием проекции bean / constructor
Я пробую проекцию, подобную следующей:
Projections.bean(Booking.class,
booking.uuid,
Projections.bean(User.class,
booking.endUser.uuid
).as(booking.endUser.getMetadata().getName()
);
SQL, сгенерированный текущим решением, выглядит примерно так:
select (...)
from booking booking0_,
user user12_
where booking0_.user_id=user12_.id
Итак, как я могу заставить QueryDSL объединять таблицы, а не выбирать из них всех?Я на правильном пути, чтобы попытаться оптимизировать запрос?Имеет ли смысл проекция?