Могу ли я принудительно заставить данные пружины обновлять проверяемые поля, даже если сущность JPA не загрязнена?

Я использую Spring-data-jpa с аудитом. По сути, я хочу "прикоснуться" к своей сущности - я хочу обновить поля @LastModifiedDate и @LastModifiedBy, даже если я не внес никаких изменений в объект.

По сути, я хочу, чтобы эти два поля работали как "LastAccessedBy" и "LastAccessedDate".

Есть ли способ запустить данные Spring /JPA для записи объекта в БД (и, следовательно, запустить модуль аудита данных Spring), даже если объект не загрязнен?

Или мой единственный выбор - изменить поле аудита (например, @LastModifiedDate), а затем Spring переопределить его с обновленным значением?

2 ответа

Попробуйте использовать Spring AuditingHandler https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/auditing/AuditingHandler.html.

      @Autowired
private AuditingHandler auditingHandler;
...
auditingHandler.markModified(entity);

И в ваших модульных тестах вы инициализируете AuditingHandler следующей строкой кода:

      AuditingHandler auditingHandler = new AuditingHandler(PersistentEntities.of());

Как бы то ни было, я устанавливаю себя, когда хочу, чтобы этот столбец обновлялся, даже если я знаю, что моя сущность не грязная.

      entity.setLastModifiedDate(Instant.now());

Значение будет переопределено @LastModifiedDate аннотация, но я, по крайней мере, получу то, что хочу.

Мой случай: у меня есть таблица для отслеживания файлов в моей файловой системе с некоторыми функциональными правилами для обработки, и если пользователь загружает файл с тем же именем, что и предыдущий, если я не устанавливаю вручную lastModifiedDate Я не мог сказать, какова была дата последней загрузки.

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

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