Sie haben wahrscheinlich eine Transaktion begonnen und versuchen, eine weitere zu beginnen, ohne die vorherige festgeschrieben oder rückgängig gemacht zu haben. Die Redewendung bei der Verwendung der programmatischen Transaktionsabgrenzung ist die folgende:
try {
sess.getTransaction().begin();
// do some work
sess.getTransaction().commit()
}
catch (RuntimeException e) {
sess.getTransaction().rollback();
throw e;
}
Dies ist umständlich und fehleranfällig, und dies ist einer der Gründe, warum die Verwendung von EJBs oder Spring für deklarative Transaktionen so nützlich ist.