Ответы пользователя по тегу Hibernate
  • Организация обработки транзакций в Service Layer, имеет ли право на жизнь подобный подход?

    @kejinzo
    Java Developer
    Конечно нет. Вам придется копипастить эти декораторы для каждого сервиса который вы хотите обернуть в транзакцию. Можно сделать примерно так:

    public interface TransactionalOperation {
    
        void doOperation();
    
    }
    
    public class TransactionalHandler {
    
        @Autowired
        private SessionProvider sessionProvider;
    
        void doTransaction(TransactionalOperation transactionalOperation) {
            // Create transaction
            transactionalOperation.doOperation();
            // Commit and roolback handler
        }
    
    }
    
    public class SomeService {
    
        @Autowired
        private TransactionalHandler transactionalHandler;
    
        public void doMake() {
            transactionalHandler.doTransaction(() -> {
                // Do something in transaction
            });
        }
    
    }


    Интерфейс TransactionalOperation можно заменить на любой функциональный интерфейс Java8 с другими параметрами по своему желанию и потребностям. Таким образом класс TransactionalHandler инкапсулирует логику обработки транзакций и принимает на вход лямбду с вашей бизнес логикой. Такой подход можно использовать в любых сервисах по мере надобности без копипаста ненужного кода.
    Ответ написан