2014-12-31 5 views
0

В jpa 2.1, api StoredProcedureQuery был представлен для вызова JDBC CallableStatement. Проблема заключается в том, что я вызываю процедуру оракула, которая выполняет некоторую операцию вставки, в методе, отличном от транзакции. Я не хочу, чтобы изменение было зафиксировано, но как шокирующее, поскольку кажется, что изменение будет зафиксировано. В чем дело?jpa2.1 StoredProcedureQuery transaction plan

+0

Если вы вызываете запрос за пределами транзакции, то чего вы ожидаете от поставщика JPA? это не экстрасенс. Поместите его в txn, если вы хотите контролировать –

+0

Я хочу, чтобы он ничего не делал. Но я не могу понять, что такое tx. –

+0

, если вы сделаете «это» за пределами транзакции, то это «auto-commit» (единственное, что имеет смысл в этой ситуации). Я не вижу, как это «шокирует». Просто поставьте транзакцию и отложите ее обратно –

ответ

0

JDBC прост; Соединения создаются с включенным autoCommit по умолчанию, который будет фиксировать каждый оператор, который вы выполняете немедленно. Вы можете отключить его вручную, а затем у вас есть возможность совершить транзакцию или скопировать ее вручную. Это распространяется на JPA (который затем обрабатывается механизмами обработки транзакций EntityManager) и далее в контейнер приложения.

Если вы не хотите, чтобы изменение было совершено, не совершайте транзакцию. Если вы используете промежуточное ПО для обработки транзакций или JPA, убедитесь, что он этого не делает. Это так просто.

Ваш не транзакционный метод либо вызвал инициализацию подключения autoCommit, либо он не был действительно не транзакционным, но это зависело от реализации промежуточного программного обеспечения и jpa-провайдера.

+0

Вы правы. Предполагается, что это будет так просто. Но поскольку я сказал, что проблема в том, что мой метод не является транзакционным, а свойство autoCommit для jpa установлено в false, и оно совершает транзакцию любым способом. –

+0

Что такое промежуточное программное обеспечение, которое предоставляет трансакционные семантики, которые вы используете? Сначала я посмотрю на проблему. – miljanm