Документ PrePersist и PreUpdate в Mongodb с использованием Spring Data JPA - PullRequest
0 голосов
/ 09 января 2019

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

}

Ответы [ 3 ]

0 голосов
/ 09 января 2019

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

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

0 голосов
/ 09 июня 2019

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

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

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

0 голосов
/ 09 января 2019

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

...