Когда вы говорите, что транзакция, управляемая приложением, означает ваш код, который должен обрабатывать транзакцию. В двух словах это означает:
Звоните:
entityManager.getTransaction().begin(); //to start a transaction
тогда при успехе вы обязательно позвоните
entityManager.getTranasaction().commit(); //to commit changes to database
или в случае сбоя обязательно позвоните:
entityManager.getTransaction().rollBack();
Теперь представьте, что у вас есть контейнер, который знает, когда вызывать begin()
, commit()
или rollback()
, то есть транзакцию, управляемую контейнером. Кто-то, кто заботится о транзакции от вашего имени.
Вам просто нужно указать это.