Java 如何使用;更新当前“U时间戳”时;在H2数据库中使用JUnit?
我希望我的实体在更新时有一个修改时间戳Java 如何使用;更新当前“U时间戳”时;在H2数据库中使用JUnit?,java,mysql,hibernate,junit,h2,Java,Mysql,Hibernate,Junit,H2,我希望我的实体在更新时有一个修改时间戳mysql使用以下定义支持此功能: @Entity public class MyTable { @Column(columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP") private LocalDateTime thetime; } 问题:在我的JUnit测试中,我想使用嵌入式inmemoryH2数据库。H2不支持更新当前时
mysql
使用以下定义支持此功能:
@Entity
public class MyTable {
@Column(columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")
private LocalDateTime thetime;
}
问题:在我的JUnit
测试中,我想使用嵌入式inmemoryH2
数据库。H2不支持更新当前时间戳时的
问:如何保持列定义(因为除了自动测试之外,我将在所有情况下运行mysql)?在我的h2测试中如何解决这个问题?h2的官方声明是不支持它,解决方法是创建一个触发器。你可以在这里阅读
无论您在“columnDefinition”中添加什么,它都是特定于提供商的。而且,由于您已经使用此特定的列定义映射了您的实体,因此您不会给自己留下太多的操作空间
你可以做几件事。其中一些是黑客
为测试混合XML配置。实体的XML配置n比注释具有更高的优先级,因此您可以实际使用H2特定的列定义进行覆盖
@列(columnDefinition=“TIMESTAMP default CURRENT\u TIMESTAMP on update CURRENT\u TIMESTAMP”)
私有LocalDateTime时间
数据库替代方案的不可知性是将时间生成留给应用程序服务器层,并将其挂接到实体上的@PrePersist
@PreUpdate
侦听器
如果时间戳必须由数据库生成,则可以执行与生成ID类似的操作。使用某种专用对象从数据库中读取当前的_时间戳,并在持久化、更新之前将其放入实体
您可以直接在数据库属性中设置此属性。