junit JPA删除早于x天的记录,并使用H2为其编写测试

0s7z1bwu  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(111)

我想从历史记录表中删除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:
我可以做些什么来测试它?这个查询可以被转换成不需要原生查询的东西吗?

83qze16e

83qze16e1#

timestamp AT TIME ZONE 'time zone name'是支持的,因为旧的不支持的H2 1.4.200,它看起来像你使用的一些旧版本,需要升级。
请注意,IANA(Olson)时区名称在H2中区分大小写,您需要将其指定为'Europe/Helsinki',否则您将收到未知时区ID异常。

相关问题