我使用的是hibernate core 5.4.22和hibernate common annotations 5.1.2。我尝试使用以下注解保存db条目上的更新时间戳:
@UpdateTimestamp private LocalDateTime closedDateTime;
不幸的是,这只在db中创建新条目时有效,而在更新条目行时无效。
vxf3dgd41#
根据hibernate文档:这个 @UpdateTimestamp 注解指示hibernate在持久化实体时使用jvm的当前时间戳值设置带注解的实体属性。支持的属性类型包括:java.util.date文件java.util.calendar文件java.sql.date日期java.sql.timejava.sql.timestamp您使用直接更新查询,但是 @UpdateTimestamp 注解不适用于这种情况。想象一下你有 TestData 实体:
@UpdateTimestamp
TestData
@Entity public class TestData { @Id private Long id; private String name; @UpdateTimestamp private LocalDateTime time; }
因此,您可以按以下方式创建新实体:
TestData testData = new TestData(); testData.setId(1L); testData.setName("Name 1"); entityManager.persist(testData);
或按以下方式更新现有实体:
TestData testData = entityManager.find(TestData.class, 1L); testData.setName("Name 11"); testData = entityManager.merge(testData);
在最后一种情况下,hibernate将更新 time 通过以下查询自动输入字段:
time
13:00:32,468 DEBUG SQL:144 - // update com.test.hibernate.entities.TestData update TEST_SCHEMA.TST_TEST_DATA set name=?, time=? where id=?
1条答案
按热度按时间vxf3dgd41#
根据hibernate文档:
这个
@UpdateTimestamp
注解指示hibernate在持久化实体时使用jvm的当前时间戳值设置带注解的实体属性。支持的属性类型包括:
java.util.date文件
java.util.calendar文件
java.sql.date日期
java.sql.time
java.sql.timestamp
您使用直接更新查询,但是
@UpdateTimestamp
注解不适用于这种情况。想象一下你有
TestData
实体:因此,您可以按以下方式创建新实体:
或按以下方式更新现有实体:
在最后一种情况下,hibernate将更新
time
通过以下查询自动输入字段: