我在MongoDB实体中使用@PrePersist
和@PreUpdate
时遇到问题
我有一个超类,它具有诸如createAt和updateAt之类的元字段,如果将其定义为@Entity
,一切都可以正常工作,但是似乎不能与@Document
一起工作。
那么,对于mongo实体角色,我可以使用什么功能来像@PrePersist
和@PreUpdate
一样工作?
这是我的超人
@EntityListeners(AuditingEntityListener.class)
public class ItemDocument implements Serializable {
private static final long serialVersionUID = 5894122627332059602L;
@Id
private UUID id;
@Field("created_at")
@CreatedDate
private long created_at;
@Field("created_by")
private String created_by;
@Field("updated_at")
@LastModifiedDate
private long updated_at;
@Field("updated_by")
private String updated_by;
@PrePersist
protected void onPersist() {
this.created_at = new Date().getTime();
this.updated_at = this.created_at;
}
/**
* On update.
*/
@PreUpdate
protected void onUpdate() {
this.updated_at = new Date().getTime();
}
}
这是我的实体
@Document(collection = "test_entity")
public class TestDocument extends ItemDocument {
@Field("test_field")
private String testField;
@Field("test_field_2")
private String testField2;
}
在我的应用程序中,我已经具有@EnableJpaAuditing
注释。
编辑: 这是我的文档库:
public interface TestDocumentRepository extends DocumentBaseRepositoty<TestDocument> {
}
它从我们称为BaseRepository的1个超类继承而来:
@NoRepositoryBean
public interface DocumentBaseRepositoty<T extends ItemDocument> extends MongoRepository<T, UUID> {
}
答案 0 :(得分:2)
也许您需要使用@EnableMongoAuditing
(reference here)而不是EnableJpaAuditing
。
答案 1 :(得分:1)
这不起作用,因为Spring Data MongoDB首先不基于JPA,因此不支持JPA批注。休眠也不参与。
reference documentation中介绍了MongoDB文档实体的生命周期处理。
答案 2 :(得分:0)
解决审核问题的更好方法是使用现有的机制。
Spring Data MongoDb支持@CreatedBy @CreatedDate @LastModifiedBy @LastModifiedDate批注(否则,您可以使用Auditable接口或方便的AbstractAuditable类)。根据文档,您只需要实现当前用户获取即可。