@CreationTimestamp
是 Hibernate 提供的一个注解,用于自动设置实体类的某个字段为记录创建时的时间戳。这个注解通常用于实体类的日期或时间字段上,以便在插入记录时自动填充当前时间。
@CreationTimestamp
注解通常用于 java.util.Date
或 java.time.LocalDateTime
类型的字段上。
在需要记录数据创建时间的场景中非常有用,例如:
假设我们有一个 User
实体类,其中包含一个 createdAt
字段,用于存储用户创建时间:
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@CreationTimestamp
private LocalDateTime createdAt;
// Getters and Setters
}
@CreationTimestamp
注解没有存储毫秒值?原因:
@CreationTimestamp
注解默认使用的是 java.time.LocalDateTime
类型,而 LocalDateTime
不包含毫秒信息。
解决方法:
java.time.Instant
类型:import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.time.Instant;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@CreationTimestamp
private Instant createdAt;
// Getters and Setters
}
Instant
类型包含毫秒信息,因此可以存储毫秒值。
如果你仍然想使用 LocalDateTime
,可以通过自定义类型转换器来存储毫秒值:
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;
// Getters and Setters
@PrePersist
protected void onCreate() {
createdAt = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
}
}
在这个例子中,我们使用 @Temporal(TemporalType.TIMESTAMP)
注解来指定日期时间类型,并在 @PrePersist
方法中将 LocalDateTime
转换为 Date
类型,以便存储毫秒值。
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云