java - 我想从此方法中删除本机查询。我该怎么做?
问题描述
@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;
}
解决方案
您的评论似乎表明您希望使用派生查询创建与本机查询相同的效果。
这是不可能的。
如果从字面上看,您只是不想使用 SQL,这意味着使用 JPQL。
问题在于 JPQL 处理日期的功能非常有限,而且似乎不包括从时间戳中添加或减去月份的方法。
所以你可以做的是使用 Spring Expression Language 来传递截止日期。
这是规范的博客文章如何在 Spring Data Queries 中使用 SpEL。
这里有一些关于如何在 SpEL 中操作日期的讨论。 如何在 SpEL 中进行日期操作?
但真正的答案是:只保留 SQL。
推荐阅读
- html - 为什么“对齐”不是 div 的有效属性但仍然有效?
- css - 如何为Angular Material的日期选择器设置背景颜色
- dart - 从同一网络上的其他设备访问 dart 嵌入式网络服务器
- reactjs - Material-Table : TypeError: Object(...) is not a function Module../node_modules/@material-ui/pickers/dist/material-ui-pickers.esm.js
- ios - 如何修复 Xcode 中的“_sqlite3_prepare_v3”链接器错误
- c# - 可以在 c# MVC webapplication 中重置会话时间 [而不是 20 分钟]/或将会话时间设置为 4 小时以上
- java - 你能找到发起 repaint() 调用的人吗?
- php - 使用完整的密码将用户从 Keycloak 迁移到 LDAP
- kotlin - 如何改进三种工作略有不同的方法
- xpages - 如何使用密码运行 nhttp.exe?