Auditing

Базовый Spring
≈ 1 мин чтения

Технические поля без ручного заполнения

У сущностей часто есть служебные поля: время создания записи и время последнего изменения. Если присваивать их вручную в каждом сервисе, код дублируется и легко забыть обновить одно из значений. Spring Data JPA умеет заполнять такие поля через auditing.

@Configuration
@EnableJpaAuditing
class PersistenceConfig {
}

@Entity
@EntityListeners(AuditingEntityListener.class)
class Customer {
    @Id
    @GeneratedValue
    Long id;

    @CreatedDate
    Instant createdAt;

    @LastModifiedDate
    Instant updatedAt;
}

@EnableJpaAuditing включает инфраструктуру auditing, а AuditingEntityListener подключает её к жизненному циклу сущности. @CreatedDate отмечает значение времени создания, а @LastModifiedDate — времени последнего изменения.

Auditing хранит техническую историю

Эти поля хорошо отвечают на вопросы «когда запись появилась в хранилище?» и «когда её меняли последний раз?». Но они не заменяют даты предметной области: например, paidAt или approvedAt должны изменяться по бизнес-правилам, а не просто при любом обновлении сущности.

Auditing может хранить и автора изменения. Для @CreatedBy и @LastModifiedBy приложению дополнительно нужен способ сообщить Spring Data, кто является текущим пользователем.