PrePersist и PreUpdate в документе Mongodb с помощью Spring Data JPA

У меня проблема с использованием @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> {

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 669
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Возможно, вам нужно использовать @EnableMongoAuditing (ссылка здесь) вместо EnableJpaAuditing.

Спасибо, это должен быть ответ на мой вопрос

redondoxx 09.01.2019 15:09

Это не работает, поскольку Spring Data MongoDB не поддерживает аннотации JPA, поскольку он изначально не основан на JPA. Hibernate тоже не задействован.

Обработка жизненного цикла сущностей документов MongoDB описана в справочная документация.

Лучше всего решить проблему аудита, используя для этого существующий механизм.

Spring Data MongoDb поддерживает аннотации @CreatedBy @CreatedDate @LastModifiedBy @LastModifiedDate (в противном случае вы можете использовать интерфейс Auditable или удобный класс AbstractAuditable). Согласно документации, вы должны реализовать получение только текущего пользователя.

Полная документация аудита

Другие вопросы по теме