Использование аннотаций аудита данных Spring с классом na @Embeddable

Я хочу использовать автоматический аудит сущностей Spring Data (Spring предоставляет: @EnableJpaAuditing, AuditingEntityListener, @CreatedBy, @CreatedDate, @LastModifiedBy, @LastModifiedDate). а также имеет поля, аннотированные этими аннотациями, которые могут быть частью класса @Embeddable, который может использоваться как поле в сущностях, которые я хочу подвергнуть аудиту. Вот пример - я показываю только соответствующий код, он компилируется и запускается:

Юридическое лицо:

@EntityListeners(AuditingEntityListener.class)
public class EntityA {

    {...}

    @Embedded
    private AuditFields audit;
}

Встраиваемый класс с полями аудита:

@Embeddable
public class AuditFields {

    {...}     

    @Column(...)
    @CreatedDate
    private LocalDateTime createdDate;
}

У меня есть @EnableJpaAuditing в классе конфигурации, аудит на, я убедился, что AuditingEntityListener вызывается для всех классов, аннотированных с помощью @EntityListeners (AuditingEntityListener.class).

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

Я не хочу создать свой собственный интерфейс, который реализуют сущности, который открывал бы поля аудита некоторому настраиваемому слушателю сущностей (если бы это было так, я мог бы даже использовать интерфейс Spring Auditable и достичь того же результата, поскольку AuditingEntityListener тогда легко забрать это). Использование этого решения делает четыре аннотации полей бессмысленными, потому что я вручную открываю поля для использования Spring.

Рассматривая, как это реализовано в Spring, AuditingHandler сканирует каждую сущность, полученную AuditingEntityListener, либо на предмет реализации Auditable, либо с помощью какой-то причудливой упаковки и т. д. Для полей, аннотированных аннотациями четырех полей аудита. Он не смотрит на встроенные объекты и их поля.

Аннотирование самого класса @Embeddable с помощью аннотации @EntityListeners ничего не делает - как и ожидалось, он не зарегистрирован как объект, поэтому зачем для него вызывать какой-либо прослушиватель объекта.

Возможна ли моя идея использовать функцию аудита Spring? Может быть, мне не хватает способа настроить Spring, чтобы также учитывать встроенные объекты в сущности при сканировании ее на предмет аннотаций аудита?

Или я застрял в использовании только моего собственного интерфейса и моего собственного слушателя сущностей? Интерфейс Spring Auditable предоставляет множество методов, которые мне не нужны для моего простого случая использования, когда я могу просто получить и установить встроенный объект. Я бы вернулся к созданию собственного интерфейса и слушателя.

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

Ответы 1

Скорее всего, у вас старая версия SpringDataJap.

Я не знаю, с какой версией он был представлен, но для версии 1.11 это не работает, для версии 2.22 работает.

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