Почему в 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(...)
  • используется несколько звонков
Другие вопросы по тегам