Почему в Spring Data JPA и QueryDSL используются повторяющиеся переменные?
Есть много примеров использования QueryDSL в Интернете:
public class CustomerRepositoryImpl
extends QueryDslRepositorySupport
implements CustomerRepositoryCustom {
public Iterable<Customer> findAllLongtermCustomersWithBirthday() {
QCustomer customer = QCustomer.customer;
return from(customer)
.where(hasBirthday().and(isLongTermCustomer()))
.list(customer);
}
}
Этот код имеет смысл, но мне интересно, почему customer
"дублируется" в вызове метода list()
,
Не должен ли тип быть очевидным из ссылки в from(customer)
?
1 ответ
Решение
from
определяет источник и list
проекция. Классы запросов Querydsl не имеют аргументов универсального типа для возвращаемого типа, проекция (выделенная часть) определена в последней части цепочки построения запроса.
Примеры для случаев, когда требуется проекция, отличная от источника
- только конкретные столбцы:
query.list(customer.firstName, customer.lastName)
- вызов конструктора:
Projections.constructor(...)
- Бобовая популяция:
Projections.bean(...)
- используется несколько звонков