Использование javers с mybatis-расширенными классами - PullRequest
0 голосов
/ 29 апреля 2019

Я использую mybatis для сохранения своих сущностей.Когда отложенная загрузка коллекций / ассоциаций сущностей включена, mybatis проксирует соответствующие сущности.

При сохранении этих объектов я хочу использовать javers, чтобы точно определить, что изменилось.Это не похоже на игру с ткачами.

Предоставляет ли javers ловушку для прокси-сервера, чтобы его можно было использовать из mybatis "из коробки"?

Альтернативой может быть "снятие прокси" с классов mybatis вручную.

Пример кода:

    /**
     * @param t The entity to be created or updated by this repository
     * @return The new entity state after it was created or updated
     */
    @Override
    @Transactional
    public T save(T entity) {
        try {
            int affectedRows;
            T oldEntity = mapper.selectById(this.getId(entity));
            if (oldEntity != null) {
                Diff diff = 
                       this.getEntityComparator().compare(oldEntity,entity);
                // publish here changes to event sourcing                    
                affectedRows = mapper.update(entity);
                if (affectedRows != 1) throw new RepositoryException();
            } else {
                affectedRows = mapper.create(entity);
                if (affectedRows != 1) throw new RepositoryException();
            }
            return mapper.selectById(this.getId(entity));
        } catch (DataAccessException ex) {
            throw this.getRepositoryException(ex);
        }
    }

Редактировать : Вот связанный (без ответа) вопрос, касающийся «снятия проксирования» с объектов mybatis: Как преобразовать объект прокси Mybatis Javassist в исходный объект (unproxyобъект)

1 Ответ

1 голос
/ 14 мая 2019

Вы можете реализовать ObjectAccessHook и зарегистрировать его, используя JaversBuilder.withObjectAccessHook().

посмотри как это делается для Hibernate https://javers.org/documentation/spring-integration/#hibernate-unproxy-hook

...