【发布时间】:2022-07-20 22:44:44
【问题描述】:
我想从历史记录表中删除早于 x 天的数据。每行都有一个日期字段。到目前为止,我只设法使用本机查询来做到这一点。
public interface HistoryItemRepository extends PagingAndSortingRepository<HistoryItem, Long> {
@Modifying
@Query(
nativeQuery = true,
value = "DELETE FROM history_item hi WHERE trunc(hi.timestamp AT TIME ZONE 'EUROPE/HELSINKI') <= trunc(current_timestamp AT TIME ZONE 'EUROPE/HELSINKI') - 7"
)
Integer removeOldHistoryItems();
}
应用程序本身在 Oracle DB 上运行,这种方法运行良好。然而,测试运行 H2 数据库,因此当测试运行调用此方法的代码时,我得到 org.h2.jdbc.JdbcSQLException Syntax error in SQL statement "DELETE FROM HISTORY_ITEM HI WHERE TRUNC(HI.TIMESTAMP AT[*] TIME ZONE 'EUROPE/HELSINKI') <= TRUNC(CURRENT_TIMESTAMP AT TIME ZONE 'EUROPE/HELSINKI') - 7 "; expected "(, ., [, ::, *, /, %, +, -, ||, ~, !~, NOT, LIKE, ILIKE, REGEXP, IS, IN, BETWEEN, AND, OR, ,, )"; SQL statement:。
我可以做些什么来测试它?可以将此查询转换为不需要本机查询的内容吗?
【问题讨论】: