jpa更新数据库时如何自动设置时间戳字段?
时间: 2023-08-11 08:03:39 浏览: 235
可以使用`@PrePersist`和`@PreUpdate`注解来在持久化操作之前自动设置时间戳字段。具体做法如下:
1. 在实体类中添加时间戳字段,可以使用`java.util.Date`或者`java.time.LocalDateTime`类型。
```java
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "created_at")
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
// getters and setters
}
```
2. 在实体类上添加`@EntityListeners`注解,并指定监听器类。
```java
@Entity
@EntityListeners(MyEntityListener.class)
public class MyEntity {
// ...
}
```
3. 编写监听器类,在该类中使用`@PrePersist`和`@PreUpdate`注解来设置时间戳字段的值。
```java
public class MyEntityListener {
@PrePersist
public void prePersist(MyEntity entity) {
LocalDateTime now = LocalDateTime.now();
entity.setCreatedAt(now);
entity.setUpdatedAt(now);
}
@PreUpdate
public void preUpdate(MyEntity entity) {
entity.setUpdatedAt(LocalDateTime.now());
}
}
```
现在每次调用`entityManager.persist()`或`entityManager.merge()`方法时,都会自动设置时间戳字段的值。注意,如果使用了`@CreatedDate`和`@LastModifiedDate`注解,Spring Data JPA也会自动处理时间戳字段的赋值。
阅读全文