Я хочу использовать автоматический аудит сущностей 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 предоставляет множество методов, которые мне не нужны для моего простого случая использования, когда я могу просто получить и установить встроенный объект. Я бы вернулся к созданию собственного интерфейса и слушателя.




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