Prawdopodobnie rozpocząłeś transakcję i próbujesz rozpocząć kolejną bez zatwierdzenia lub wycofania poprzedniej. Idiom podczas korzystania z programowego rozgraniczania transakcji jest następujący:
try {
sess.getTransaction().begin();
// do some work
sess.getTransaction().commit()
}
catch (RuntimeException e) {
sess.getTransaction().rollback();
throw e;
}
Jest to kłopotliwe i podatne na błędy i jest to jeden z powodów, dla których używanie EJB lub Spring do przeprowadzania transakcji deklaratywnych jest tak przydatne.