首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用CURRENT_TIMESTAMP在H2数据库中使用"on update JUnit“?

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

Stack Overflow用户
提问于 2017-12-12 10:04:00
回答 1查看 4K关注 0票数 19

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

代码语言:javascript
运行
复制
@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测试中解决这个问题呢?

EN

Stack Overflow用户

发布于 2018-09-11 19:21:19

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

--不管你在"columnDefinition“中放了什么,它都是特定于提供者的.,而且由于您已经用这个特定的列定义映射了您的实体,所以您不会给自己留下太多的空间。

有几件事你可以做。其中一些是黑客。

  1. 用于测试的混合XML配置。实体的XML配置比注释具有更高的优先级,因此实际上可以使用H2特定的列定义覆盖。 @Column(columnDefinition =“update CURRENT_TIMESTAMP上的时间戳默认CURRENT_TIMESTAMP")
  2. 与数据库替代无关的是将时间生成留给应用服务器层,并将其连接到实体上的@PrePersist @PreUpdate侦听器
  3. 如果时间戳必须由数据库生成,则可以执行类似于If生成方式的操作。拥有某种专用对象,它从数据库中读取CURRENT_TIMESTAMP,并在持久化、更新之前将其放在实体中。
票数 11
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47769856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档