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