Spring数据MongoDB注释@CreatedDate在手动分配ID时不起作用
时间: 2024-03-24 20:39:26 浏览: 22
`@CreatedDate` 注解是 Spring Data MongoDB 提供的一个用于自动填充创建时间的注解。当我们使用 Spring Data MongoDB 自动分配 ID 时,`@CreatedDate` 注解能够正常地为创建时间赋值,但是如果我们手动为文档分配 ID,`@CreatedDate` 注解就不会自动为创建时间赋值。
如果要手动为文档分配 ID 时,依然需要使用 `@CreatedDate` 注解来自动填充创建时间,我们可以通过自定义一个 `MongoEventListener` 来实现。具体代码如下:
```java
@Component
public class SaveMongoEventListener extends AbstractMongoEventListener<Object> {
@Override
public void onBeforeConvert(BeforeConvertEvent<Object> event) {
Object source = event.getSource();
if (source != null) {
Field field = ReflectionUtils.findField(source.getClass(), "createdDate");
if (field != null) {
ReflectionUtils.makeAccessible(field);
if (field.get(source) == null) {
field.set(source, new Date());
}
}
}
}
}
```
上述代码实现了一个 `SaveMongoEventListener` 类,继承了 `AbstractMongoEventListener` 类,重写了 `onBeforeConvert` 方法。在该方法中,通过反射获取实体类中的 `createdDate` 字段,如果该字段为 null,则自动为其赋值为当前时间。这样,即使手动为文档分配 ID,`@CreatedDate` 注解也能正常地为创建时间赋值。