hibernate@updatetimestamp注解用法

bbuxkriu  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(567)

我使用的是hibernate core 5.4.22和hibernate common annotations 5.1.2。我尝试使用以下注解保存db条目上的更新时间戳:

@UpdateTimestamp
private LocalDateTime closedDateTime;

不幸的是,这只在db中创建新条目时有效,而在更新条目行时无效。

vxf3dgd4

vxf3dgd41#

根据hibernate文档:
这个 @UpdateTimestamp 注解指示hibernate在持久化实体时使用jvm的当前时间戳值设置带注解的实体属性。
支持的属性类型包括:
java.util.date文件
java.util.calendar文件
java.sql.date日期
java.sql.time
java.sql.timestamp
您使用直接更新查询,但是 @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 通过以下查询自动输入字段:

13:00:32,468 DEBUG SQL:144 - // update com.test.hibernate.entities.TestData 
update  TEST_SCHEMA.TST_TEST_DATA 
set
   name=?,
   time=? 
where
   id=?

相关问题