当前位置: 首页 > 知识库问答 >
问题:

JPA删除超过x天的旧记录,并用H2为其编写测试

吴驰
2023-03-14

我想从历史记录表中删除超过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数据库,因此我在SQL语句“DELETE VERHISTORY_ITEMHI WHERE TRUNC(HI. TIMESTAMP AT[*]TIME ZONE'EUROPE/HELSINKI')中得到org.h2.jdbc.JdbcSQLException语法错误

我能做些什么来测试它?可以将此查询转换为不需要本机查询的内容吗?


共有1个答案

屠杰
2023-03-14
匿名用户

由于旧版本H2 1.4.200不受支持,因此支持时区时间戳“时区名称”,看起来您使用的是需要升级的旧版本。

请注意,IANA(Olson)时区名称在H2中区分大小写,您需要将其指定为'Europe/Helsinki',否则您将获得未知的时区ID异常。

 类似资料:
  • 我正在寻找一个简单的批处理脚本,它将允许我删除旧文件并记录它是否删除了旧文件。搜索完网站后,我发现“forfiles”非常有用: 来自:批处理文件以删除超过N天的文件 正如我所说,我关心的是记录已删除的内容。我尝试了很多东西,但仍然不起作用。这是我的实际代码: 日志文件已创建,但为空,旧文件不会被删除。(它应该删除我2016年的8个文件)当我使用原始代码时,它会删除文件。我可能读过关于逃离 目标是

  • 问题内容: 如何提出一个存储过程来选择过去30天的结果? 问题答案: 用适当的列名称替换第一个GETDATE()。

  • 我无法让FORFILES为我工作。我运行一个. bat,使用下面的一个示例备份我每天拥有的一些数据库。 然后,在运行备份后,我想使用下面的示例删除超过五天的旧文件。 但实际情况是,它创建备份,但从不删除旧的备份。我做错了什么? Ken这似乎仍然不起作用。我将@文件更改为@路径并运行了,但我仍然有备份。我还有另一个问题,我是否可以将删除限制为仅从bak\u开始的文件?我是否可以按文件名删除该文件,因

  • 问题内容: 我可以为以下代码编写的最 详尽的 测试是什么? 此方法在类内。该方法调用JpaRepository,然后在实体上调用其方法。 如果无法测试是否要删除实体,是否可以在该方法上运行 其他 任何功能? 问题答案: 有两种测试策略。一种是单元测试,即确保您的服务正常运行。另一个是集成/端到端测试,即确保所有功能都能很好地协同工作。 您对自己拥有的东西进行单元测试,对所有内容进行集成测试。这是一

  • 本文向大家介绍从表中删除记录,其中相关面试题,主要包含被问及从表中删除记录,其中时的应答技巧和注意事项,需要的朋友参考一下 尝试首先选择最大组,然后将其用作子查询。 编辑:

  • 问题内容: 我有一个这样的 LoginTime 表: 我只想保留5条最新记录(按“ datetime”列),并删除所有以前的记录,其中 是否可以通过一个mysql查询来实现? 问题答案: 我相信这会奏效…