JPA: Каков наилучший способ обнаружения изменений сущностей - PullRequest
0 голосов
/ 16 января 2020

Мне бы хотелось узнать ваше мнение о наиболее подходящем и оптимизированном способе обнаружения изменений объекта во время операции обновления.

Мое предложение:

  1. У меня есть человек объект как параметр (из остатка контроллера)
  2. Я загружаю из персистентности объект в базу данных, а также из этого списка (ленивый), чтобы иметь все дочерние данные
  3. Я отсоединяю объект из контекста постоянства (необходимо, чтобы после сохранения загруженный объект не обновлялся)
  4. Я использую 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;
    }
    

Спасибо Вы за вашу помощь.

...