我想从此方法中删除本机查询。我该怎么做?

Posted

技术标签:

【中文标题】我想从此方法中删除本机查询。我该怎么做?【英文标题】:I want to remove native query from this method. How do I do it? 【发布时间】:2020-11-07 08:05:21 【问题描述】:
@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; 


【问题讨论】:

你有什么问题? 我想在没有原生查询的情况下使用这种方法。像 findByNationalId(String id)。像这样 此方法用于删除6个月以上的记录。 transaction_cre_sys_date 是日期变量。保存为 localDateTime 类型 我不明白。您要删除还是选择记录? 您的Transaction 实体长什么样? 【参考方案1】:

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

这是不可能的。

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

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

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

这里是canonical blog post how to use SpEL in Spring Data Queries。

这里有一些关于如何在 SpEL 中操作日期的讨论。 How do I do date manipulation in SpEL?

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

【讨论】:

非常感谢。我还是新手。再次感谢! 欢迎来到 SO。如果您觉得答案有帮助,请点赞。如果也解决了您的问题,请采纳。

以上是关于我想从此方法中删除本机查询。我该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

Druid -> 按本机查询的时间戳以外的另一列对数据进行排序

用一个查询从两个表中删除数据? [复制]

从此SQL查询中删除变量(子查询帮助)

sqlite 和数据库工作的新手,我该如何做这个查询?

如何从 JPA 中的本机查询中提取别名

如何使用 RedirectToAction 方法添加查询字符串值?