Мне бы хотелось узнать ваше мнение о наиболее подходящем и оптимизированном способе обнаружения изменений объекта во время операции обновления.
Мое предложение:
- У меня есть человек объект как параметр (из остатка контроллера)
- Я загружаю из персистентности объект в базу данных, а также из этого списка (ленивый), чтобы иметь все дочерние данные
- Я отсоединяю объект из контекста постоянства (необходимо, чтобы после сохранения загруженный объект не обновлялся)
Я использую JaVers для восстановления различий
@PersistenceContext
private EntityManager entityManager;
@Override
@Transactional
public String update(Person updatedPerson) {
Person personInDb = getDetached(person.getId()));
Person updated = personRepo.save(updatedPerson);
Javers javers = JaversBuilder.javers().withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE).build();
return javers.compare(personInDb, updated);
}
private Person getDetached(Long id) {
Person person = personRepo.findById(id)
.orElseThrow(() -> new MyException("Person not found"));
// fetch lazy collections
person.getAccounts().size();
person.getProfiles().size();
person.getAuthorization().size();
entityManager.detach(person);
return person;
}
Спасибо Вы за вашу помощь.