В jpa 2.1, api StoredProcedureQuery был представлен для вызова JDBC CallableStatement. Проблема заключается в том, что я вызываю процедуру оракула, которая выполняет некоторую операцию вставки, в методе, отличном от транзакции. Я не хочу, чтобы изменение было зафиксировано, но как шокирующее, поскольку кажется, что изменение будет зафиксировано. В чем дело?jpa2.1 StoredProcedureQuery transaction plan
ответ
JDBC прост; Соединения создаются с включенным autoCommit по умолчанию, который будет фиксировать каждый оператор, который вы выполняете немедленно. Вы можете отключить его вручную, а затем у вас есть возможность совершить транзакцию или скопировать ее вручную. Это распространяется на JPA (который затем обрабатывается механизмами обработки транзакций EntityManager) и далее в контейнер приложения.
Если вы не хотите, чтобы изменение было совершено, не совершайте транзакцию. Если вы используете промежуточное ПО для обработки транзакций или JPA, убедитесь, что он этого не делает. Это так просто.
Ваш не транзакционный метод либо вызвал инициализацию подключения autoCommit, либо он не был действительно не транзакционным, но это зависело от реализации промежуточного программного обеспечения и jpa-провайдера.
Вы правы. Предполагается, что это будет так просто. Но поскольку я сказал, что проблема в том, что мой метод не является транзакционным, а свойство autoCommit для jpa установлено в false, и оно совершает транзакцию любым способом. –
Что такое промежуточное программное обеспечение, которое предоставляет трансакционные семантики, которые вы используете? Сначала я посмотрю на проблему. – miljanm
- 1. persistenceUnitName с JPA2.1
- 2. Как вызвать StoredProcedureQuery несколько раз
- 3. WildFly8 JPA2.1 и Перечисленные значения
- 4. Вызов функции Oracle с помощью StoredProcedureQuery?
- 5. JPA 2.1 StoredProcedureQuery с PostgreSQL и REF_CURSORs
- 6. около .plan! Как выполнять программы в файле .plan
- 7. Oracle Execution Plan
- 8. Bamboo Generic Build Plan
- 9. Google Plan: Polymer & Angular
- 10. Azure App Service Plan
- 11. Query plan for Sqlite
- 12. memcache loadbalance/failover plan
- 13. RewinkDB Query Plan
- 14. Redshift - Simplify Query Plan
- 15. SQLite Query plan
- 16. Update один-ко-многим ArrayList в JPA2.1
- 17. EJB Transaction
- 18. Wcf transaction
- 19. Sqlite Transaction
- 20. Transaction Timeout
- 21. Rails Transaction
- 22. DbContextScope Transaction
- 23. Rails transaction
- 24. Laravel transaction
- 25. Mobx: Transaction
- 26. Spring @Transaction
- 27. Fragment Transaction
- 28. Java Parsing Oracle Explain Plan
- 29. Oracle Plan Manager Design Design
- 30. Обновление Heroku Postgres DB plan
Если вы вызываете запрос за пределами транзакции, то чего вы ожидаете от поставщика JPA? это не экстрасенс. Поместите его в txn, если вы хотите контролировать –
Я хочу, чтобы он ничего не делал. Но я не могу понять, что такое tx. –
, если вы сделаете «это» за пределами транзакции, то это «auto-commit» (единственное, что имеет смысл в этой ситуации). Я не вижу, как это «шокирует». Просто поставьте транзакцию и отложите ее обратно –