使用Spring Data JPA的Mongodb文档中的PrePersist和PreUpdate

时间:2019-01-09 09:50:28

标签: java spring mongodb spring-data spring-data-mongodb

我在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> {

}

3 个答案:

答案 0 :(得分:2)

也许您需要使用@EnableMongoAuditingreference here)而不是EnableJpaAuditing

答案 1 :(得分:1)

这不起作用,因为Spring Data MongoDB首先不基于JPA,因此不支持JPA批注。休眠也不参与。

reference documentation中介绍了MongoDB文档实体的生命周期处理。

答案 2 :(得分:0)

解决审核问题的更好方法是使用现有的机制。

Spring Data MongoDb支持@CreatedBy @CreatedDate @LastModifiedBy @LastModifiedDate批注(否则,您可以使用Auditable接口或方便的AbstractAuditable类)。根据文档,您只需要实现当前用户获取即可。

Complete documentation of auditing