首页 > 解决方案 > 我想从此方法中删除本机查询。我该怎么做?

问题描述

@Modifying(clearAutomatically = true)
@Transactional 
@Query(value = "DELETE FROM transaction WHERE transaction_cre_sys_date <= (now() - interval 6 month)",nativeQuery = true) 
void deleteSixMonthOldTransactions();

这是我的交易实体。我想删除超过 6 个月的记录

public class Transaction { 
    private Integer id; 
    private String transactionSource; 
    private String transactionId; 
    private LocalDateTime transactionCreSysDate; 
}

标签: javaspring-bootjpaspring-data-jpajpql

解决方案


您的评论似乎表明您希望使用派生查询创建与本机查询相同的效果。

这是不可能的。

如果从字面上看,您只是不想使用 SQL,这意味着使用 JPQL。

问题在于 JPQL 处理日期的功能非常有限,而且似乎不包括从时间戳中添加或减去月份的方法。

所以你可以做的是使用 Spring Expression Language 来传递截止日期。

这是规范的博客文章如何在 Spring Data Queries 中使用 SpEL

这里有一些关于如何在 SpEL 中操作日期的讨论。 如何在 SpEL 中进行日期操作?

但真正的答案是:只保留 SQL。


推荐阅读