Транзакция JPA выданаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Транзакция JPA выдана

Сообщение Anonymous »

проверьте это. я просто тестирую транзакцию, допустив ошибку, я допустил ошибку в строке em.persist(enro);. и это должен быть переход в блок исключений, верно? вместо этого он выполняет фиксацию и завершает транзакцию. и тогда он не переходит на следующую строку i=1; он попал в исключение и выполнялся до отката. Когда дошли до строки оператора отката, возникла ошибка: «В настоящее время ни одна транзакция не активна». почему? значит откат бесполезен?
public int addclassOrEnrollment(Enrollment enro, Boolean createClass) {
int i=0;
EntityManager em=null;
try {em=ConnectionClass.getManager();
em.getTransaction().begin(); // transaction was started successfully
if(createClass==true) {
enro.getClassroom().setCreaterId(enro.getUser());;
em.persist(enro.getClassroom());
}
em.persist(enro.getUser());
System.out.println("error test 1");
em.persist(enro); // here will occur error beause of trying to add FK without parent record in other table
System.out.println("here is 2");
em.getTransaction().commit();// at this line jumped to Exception block
i=1; // this line didn't excute
} catch (Exception e) {
System.out.println("error :"+e.getMessage());// this line excuted

System.out.println("next error");// this line excuted
em.getTransaction().rollback(); // here i got error message saying "No transaction is currently active"

// TODO: handle exception
}finally {
if(em.isOpen()) {
em.close();
}
}

return i;

}

помогите и объясните мне. если я использую это, em.getTransaction().rollback() бесполезен, потому что он не был зафиксирован, а активная транзакция была обработана как ложная, хотя перед фиксацией было получено исключение;
} catch (Exception e) {
if (em != null && em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
System.out.println("error :"+e.getMessage());
// TODO: handle exception
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ion-issued
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»