В каждом источнике, который я видел, транзакция определяется как набор операций, которые успешно или сбой вместе. Однако использование EntityManager
в JPA, похоже, требует транзакции даже для сохранения единственного объекта, который я создал в памяти. В чем смысл транзакции? Разве эта операция не является атомной? Как я могу откат одного entity.persist()
? Есть ли четкое определение концепции в любом месте документации Java EE?Что такое транзакция в java EE?
ответ
Думая, что EntityManager.persist()
является атомарным, как всегда, используя SQL с включенным автоматическим фиксацией. Транзакция используется для создания атомарной операции, которая позволяет вставить одну или несколько строк в одну или несколько таблиц как единую операцию атома, либо вставляется, либо ничего не вставлено.
Если у вас нет транзакции, и вы вставляете пользователя и его два телефонных номера (две таблицы), и что-то не так, когда вы вставляете второй номер телефона, вы хотите, чтобы вся транзакция завершилась неудачей, а не противоречивые данные.
Если вы используете управляемый приложением EntityManager, вы контролируете транзакцию progammaticrally (EntityManager.getTransaction()
), поэтому вы контролируете, какие операции (вставки/обновления) должны выполняться как атомная операция.
Если вы используете управляемый контейнером EntityManager (Spring, JavaEE), то транзакция является декларативной (аннотация @Transactional), поэтому транзакции в основном относятся к методу (обычно распространяются через вызовы нескольких методов).
Это только верхушка айсберга, когда речь идет о сделках, есть и другие вещи, как уровни изоляции и сериализованная транзакций, но позволяет переговоры о том, что в другой раз :)
Не является ли эта операция уже атомной? Как я мог откат одного
entity.persist()
?
Это может быть или не быть атомарным. Например, если ваша организация имеет отношение к другому объекту с CascadeType.PERSIST
или использует вторичную таблицу, для ее сохранения потребуется более одного оператора SQL.
На самом деле нет однозначного сопоставления между вызовами и операторами SQL, причем оба из них не должны совпадать по времени.
- 1. Java EE, что означает транзакция в EJB?
- 2. Что такое Java EE?
- 3. Java EE: транзакция Eclipselink отсутствует
- 4. Что такое веб-компонент в Java EE?
- 5. Что такое перехватчики в Java EE?
- 6. Что такое фасад в Java EE?
- 7. Что такое «распределенная транзакция»?
- 8. Oracle: Что такое транзакция?
- 9. Что такое транзакция зомби?
- 10. Что такое (память) следа сервлета Java EE?
- 11. Что такое API, одобренный Java EE?
- 12. Что такое веб-приложение Java EE?
- 13. Что такое транзакция на Parse.com?
- 14. Что такое транзакция в запросе аутентификации janrain?
- 15. Что такое «Исходящая транзакция» в условиях непрофессионала?
- 16. Что такое модуль EJB в Java EE 6?
- 17. Что такое «объект, управляемый контейнером» в мире Java 6 EE?
- 18. Что такое веб-контекст в следующем контексте (java ee tutorials)
- 19. Что такое транзакция с точки зрения Azure?
- 20. Что такое Java Java Bean?
- 21. Что такое транзакция с базой данных?
- 22. Что такое шаблон экстрактора полезных данных Java EE?
- 23. Что такое замена InstallAnywhere для установки приложения Java EE?
- 24. Что такое соглашение об именовании пакетов Java EE?
- 25. Что такое инфраструктура Java EE для веб-сервисов?
- 26. Что означает «освоение Java EE»?
- 27. Что такое Tomcat? Веб-контейнер или контейнер EE?
- 28. Что такое явная транзакция базы данных в Entity Framework 6?
- 29. Что такое корпоративные приложения?
- 30. Что такое Spring IOC
Там тонны чтения на это, на самом деле , https://en.wikibooks.org/wiki/Java_Persistence/Transactions – lexicore
спасибо. проблема в том, что я читал тонну, но все же даже ссылка определяет транзакцию как «набор операций». почему я должен * использовать его для одного объекта entity.persist? –
Кто сказал, что вам нужно? – lexicore