У меня есть пользовательское DTO:
@Data
@AllArgsConstructor
public class SaleCreditsSearchDto {
private UUID ticketUuid;
private UUID saleUuid;
private String saleType;
private Long ticketNumber;
private LocalDateTime date;
private Double amount;
private Double saleTotalAmount;
private String customerName;
private String accountName;
}
И запрос в моем репозитории, который возвращает мне коллекцию страниц со следующими:
public interface SaleRepository
extends CrudRepository<Sale, UUID> {
@Query("SELECT new com.company.myproject.web.dto.SaleCreditsSearchDto("
+ "ticket.id, sale.id, sale.type, ticket.number, ticket.date, credit.amount, CONCAT(customer.lastname, ' ', customer.firstname), account.title)"
+ " FROM Sale sale"
+ " JOIN sale.ticket ticket"
+ " JOIN sale.credit credit"
+ " JOIN sale.customer customer"
+ " LEFT JOIN sale.account account"
+ " WHERE ticket.idEntity= :identity"
+ " AND ticket.date>= :datebegin"
+ " AND ticket.date< :dateend"
+ " AND ticket.state = 'FINISHED'"
+ " AND credit.initialAmount > 0"
+ " GROUP BY ticket.id, sale.id, credit.initialAmount, customer.lastname, customer.firstname, account.title")
Page<SaleCreditsSearchDto> findTotalCredits(@Param("identity") String identity,
@Param("datebegin") LocalDateTime dateBegin,
@Param("dateend") LocalDateTime dateEnd,
Predicate<SaleCreditsSearchDto> predicate,
Pageable pageable);
}
Но методы @Query не принимают большепараметры, чем @Param и объект Pageable, поэтому я не могу передать ни реализацию спецификации, ни предикат.
Что бы вы мне предложили, чтобы я продолжал возвращать страницу, но с возможностью фильтрации по некоторым полямизвлечено в предложении SELECT?
Реализовать мой собственный метод репозитория?Передача фильтра в переменную @Query?Вы практиковали что-то подобное раньше?Спасибо:)