Я разрабатываю приложение с EJB, когда я делаю сделку по базе данных, я получаю следующее сообщение об ошибке:Java исключение - Невозможно вызвать совершить, когда автокоммит = истина
Grave: RAR5031:System Exception
javax.resource.spi.LocalTransactionException:
Can't call commit when autocommit=true
Ниже приведен код:
public boolean update(Person vo) {
boolean r = false;
try
{
entityManager.getTransaction().begin();
entityManager.merge(vo);
entityManager.getTransaction().commit();
r = true;
} catch (Exception e)
{
} finally {
return r;
}
}
Если этот код не вызывается из EJB, не получите ошибку. Я получаю ошибку только при вызове из EJB.
Если бы использовать декларативный управляемый контейнер транзакции, вам не нужно будет явно начинать и совершать сделки. Все грязные задачи обрабатываются контейнером под капотом. Если бы вы, однако, были заинтересованы в использовании программных транзакций по некоторым неясным причинам, тогда вы могли бы использовать [управляемые транзакциями транзакции] (https://docs.oracle.com/javaee/7/tutorial/transactions004.htm) (вводя 'javax.transaction.UserTransaction', используя аннотацию' @ Resource', и запускать и совершать транзакции явно/программно). – Tiny