Везде написано, что сервисный (или любой другой) метод должен быть транзакционным для JPA Persistence Context, который будет создан, но я нигде не могу найти, что является мотивацией такого дизайна.
Скажем, я хочу вставить одну строку в БД, это всего лишь один оператор БД, который в любом случае будет транзакционным, если autocommit
включен.Но внезапно, если вы используете JPA / Hibernate, тогда вы должны сделать свой бизнес-метод @Transactional для JPA, чтобы иметь возможность создавать контекст постоянства и выполнять этот единственный оператор.
В мире без JPA мы можем иметьнетранзакционный метод обслуживания, содержащий даже несколько операторов БД, конечно, рискуя потерять атомарность всей операции (это, безусловно, наш выбор), поэтому JPA спроектирован таким образом, что заставляет нас создавать транзакционные методы, даже когда этот методсодержит один оператор БД и в любом случае этот оператор будет выполняться в транзакции с autocommit=true
?