Вероятно сте започнали транзакция и се опитвате да започнете друга, без да сте ангажирали или връщате предишната. Идиомът при използване на програмно разграничаване на транзакции е следният:
try {
sess.getTransaction().begin();
// do some work
sess.getTransaction().commit()
}
catch (RuntimeException e) {
sess.getTransaction().rollback();
throw e;
}
Това е тромаво и податливо на грешки и това е една от причините използването на EJB или Spring за декларативни транзакции да е толкова полезно.