【发布时间】:2016-06-03 15:58:25
【问题描述】:
我正在使用 spring JPA Repositories 将 Twitter 推文保存在我的数据库中。推文的日期在 MySQL 数据库中保存为 Datetime。现在我想删除所有超过一年的推文。我看到有CURRENT_TIME 的功能,我想到了CURRENT_TIME - 360 之类的东西。我知道那不是正确的语法,但我不知道该怎么做。这是我所拥有的:
@Modifying
@Transactional
@Query("DELETE FROM Tweetpost t WHERE t.createdAt > ")
int removeOlderThan();
编辑已解决:
存储库:
@Modifying
@Transactional
@Query("DELETE FROM Tweetpost m WHERE m.createdAt < :date")
int removeOlderThan(@Param("date") java.sql.Date date);
服务:
public void removeOldItems() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -360);
java.sql.Date oneYear = new java.sql.Date(cal.getTimeInMillis());
tweetRepository.removeOlderThan(oneYear);
}
【问题讨论】:
-
WHEREt.createdAt < CURDATE() - INTERVAL 1 YEAR -
那么为什么这个标签是mysql?
-
因为它的 mysql 数据库在后台工作。
-
但是你不能将原始(my)sql传递给它?
-
不使用 Spring JPA Data,当我使用“Interval”时会引发异常。