我希望我的实体在更新时有一个修改时间戳。 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测试中解决这个问题?
答案 0 :(得分:9)
H2的官方声明是不支持它,解决方法是创建触发器。您可以在这里https://github.com/commandos59/h2database/issues/491
阅读无论您在“ columnDefinition”中输入什么,都是特定于提供程序的。并且由于您已经使用此特定的列定义映射了实体,因此您没有太多的操作空间。
您可以执行几项操作。其中一些是骇客。
@Column(columnDefinition =“更新时CURRENT_TIMESTAMP的TIMESTAMP默认CURRENT_TIMESTAMP”) 私人LocalDateTime thetime
与数据库无关是将时间生成留给应用服务器层,并将其挂钩到实体上的@PrePersist
@PreUpdate
侦听器
如果必须由数据库生成时间戳,则可以执行类似于生成ID的方式。有某种专用对象可以从数据库中读取CURRENT_TIMESTAMP并将其作为实体,然后再进行持久存储,更新。