У меня проблема с использованием @PrePersist и @PreUpdate в Entity MongoDB
У меня есть суперкласс с метаполями, такими как createAt и updateAt, все работает нормально, если он определяется как @Entity, но, похоже, он не работает с @Document.
Итак, какую функцию я могу использовать для работы с подобными @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> {
}
он происходит от 1 суперкласса, который мы назвали BaseRepository:
@NoRepositoryBean
public interface DocumentBaseRepositoty<T extends ItemDocument> extends MongoRepository<T, UUID> {
}




Возможно, вам нужно использовать @EnableMongoAuditing (ссылка здесь) вместо EnableJpaAuditing.
Это не работает, поскольку Spring Data MongoDB не поддерживает аннотации JPA, поскольку он изначально не основан на JPA. Hibernate тоже не задействован.
Обработка жизненного цикла сущностей документов MongoDB описана в справочная документация.
Лучше всего решить проблему аудита, используя для этого существующий механизм.
Spring Data MongoDb поддерживает аннотации @CreatedBy @CreatedDate @LastModifiedBy @LastModifiedDate (в противном случае вы можете использовать интерфейс Auditable или удобный класс AbstractAuditable). Согласно документации, вы должны реализовать получение только текущего пользователя.
Спасибо, это должен быть ответ на мой вопрос