hibernate - Spring Data JPA 在 @Query 注释存储库方法上使用 Pageable 和 Predicate 过滤器
问题描述
我有一个自定义 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;
}
我的存储库中的一个查询返回给我一个 Page 集合:
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 对象更多的参数,所以我不能传递规范实现,也不能传递谓词。
您会建议我继续返回 Page 但可以过滤 SELECT 子句中检索到的某些字段吗?
实现我自己的存储库方法?在@Query 变量中传递过滤器?你以前练习过类似的东西吗?谢谢 :)
解决方案
推荐阅读
- python - 发送到断开连接的套接字第一次成功
- go - 如何实时收集 Terraform 计划命令输出以显示在前端?
- javascript - 如何在 tinyMCE Javascript 上处理 404 图像 url
- android - 在 TextView Kotlin 中的 OCR 文本提取上搜索和可点击文本
- spring-cloud-config-server - 如何在不使用 spring.cloud.config.server.git.refreshRate 属性的情况下以编程方式从 spring 云配置服务器中的 git repo 中提取代码?
- splunk - 给定时间段内所有事件的数值总和
- javascript - 货币符号的 JavaScript Concat 问题
- binary-tree - Avl 树查找与插入
- reactjs - 用 Draft.js 实体替换特定字符串
- mmenu - 使用 mmenu 进行性能调试 - 如何构建非缩小、非混淆版本