java Hibernate中创建字段的即时日期时间还是本地日期时间?

e0uiprwp  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(191)

在Spring Booot应用中,我需要保留内容的创建日期。为此目的,通常会使用LocalDateTime,但我认为使用Instant更好,因为这个字段就像一个时间戳。另一方面,我刚刚看到@CreationTimestamp,我对正确的用法感到困惑。

@CreationTimestamp
private LocalDateTime createdAt;

那么,我需要在Hibernate中使用@CreationTimestamp作为日期时间字段吗?或者在我的实体中使用Instant来保持创建日期是否可以,如下所示?

private Instant createdAt;
lsmepo6l

lsmepo6l1#

@CreationTimestamp是一个Hibernate注解,当实体持久化到数据库中时,它会自动将实体创建时间戳设置为当前时间。此注解适用于java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp和java.time.LocalDateTime类型。它等效于使用LocalDateTime.now()设置值。
如果你想存储一个毫秒精度的时间戳,那么使用Instant是一个不错的选择,Instant是java.time包中的一个类,它表示一个时间点,相对于纪元(1970年1月1日,00:00:00 UTC),精度为纳秒。
因此,可以使用Instant将创建日期存储在实体类中,如下所示:

private Instant createdAt;

在将实体持久化到数据库之前,可以使用www.example.com()将createdAt字段设置为当前时间戳Instant.now。

MyEntity entity = new MyEntity();
entity.setCreatedAt(Instant.now());
entityManager.persist(entity);

总之,可以使用Instant将创建日期存储在实体类中并手动设置,或者使用@CreationTimestamp在Hibernate中自动设置创建时间戳。这两种方法都有效,具体选择取决于您的用例和偏好。

相关问题