gpt4 book ai didi

java - 如何使用 JUnit 在 H2 数据库中使用 "on update CURRENT_TIMESTAMP"?

转载 作者:IT老高 更新时间:2023-10-28 23:58:20 25 4
gpt4 key购买 nike

我希望我的实体在更新时有一个修改时间戳。 mysql 使用以下定义支持这一点:

@Entity
public class MyTable {
@Column(columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")
private LocalDateTime thetime;
}

问题:在我的 JUnit 测试中,我想使用内存中的嵌入式 H2 数据库。并且 H2 不支持 on update CURRENT_TIMESTAMP

问题:我如何保留列定义(因为我将在所有情况下运行 mysql,除了自动化测试)?我如何在我的 h2 测试中解决这个问题?

最佳答案

H2 的官方声明是不支持,解决方法是创建一个触发器。你可以在这里阅读 https://github.com/commandos59/h2database/issues/491

无论您在“columnDefinition”中放入什么,它都是特定于提供者的。并且由于您已经将您的实体映射到这个特定的列定义,因此您不会给自己留下太多操作空间。

您可以做几件事。其中一些是骇客。

  1. 为测试混合 XML 配置。实体的 XML 配置比注释具有更高的优先级,因此您实际上可以用 H2 特定的列定义覆盖。

    @Column(columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")private LocalDateTime 时间

  2. Agnostic of the Database alternative 是将时间生成留给应用程序服务器层并将其挂接到 @PrePersist @PreUpdate 监听器

  3. 如果时间戳必须由数据库生成,您可以执行类似于 ID 生成方式的操作。有某种专用对象可以从数据库中读取 CURRENT_TIMESTAMP 并在您坚持、更新之前将其放入实体。

关于java - 如何使用 JUnit 在 H2 数据库中使用 "on update CURRENT_TIMESTAMP"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com