Как отключить автоматическое обновление в спящем/JPA

Можно ли остановить спящий режим при автоматическом обновлении постоянного объекта?

    @Transactional
    public ResultTO updateRecord(RequestTO requestTO) {

        Entity entity = dao.getEntityById(requestTO.getId());

         // now update the entity based on the data in the requestTO

         ValidationResult validationResult = runValidation(entity);

         if(validationResult.hasErrors()) {
            // return ResultTO with validation errors
         } else {
             dao.persist(entity);
        }
    }

Вот что происходит в коде, я извлекаю объект, который будет считаться спящим, чтобы находиться в постоянном состоянии, затем я обновляю некоторые из полей в сущности, а затем передаю объект для проверки. если проверка не выполняется, то не обманывайте, если проверка завершается успешно, а затем сохраняйте объект.

Вот основная проблема с этим потоком: поскольку я обновил сущность для ее использования в валидации, неважно, вызываю ли я метод persist() (по DAO) или нет, запись всегда будет обновлено, потому что hibernate обнаруживает, что объект был изменен, и помещает его для обновления.

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

Пожалуйста, имейте в виду, что я использую реализацию hibernates JPA. поэтому для Hibernate конкретные ответы, касающиеся API с гибернацией, не будут работать для меня.

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

Спасибо

- ИЗМЕНИТЬ --- Я не смог найти решение для этого, поэтому я решил отказаться от транзакции, не выбрасывая какое-либо исключение RuntimeException, хотя я в декларативной транзакции, используя:

TransactionInterceptor.currentTransactionStatus() setRollbackOnly();.

который работает как шарм.

Ответ 3

Выбросить исключение, если проверка завершена, и иметь обработчик вызывающего.

Ответ 4

Вы можете вызвать следующий код:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();