おそらくトランザクションを開始し、前のトランザクションをコミットまたはロールバックせずに別のトランザクションを開始しようとしています。プログラムによるトランザクション境界を使用する場合のイディオムは次のとおりです。
try {
sess.getTransaction().begin();
// do some work
sess.getTransaction().commit()
}
catch (RuntimeException e) {
sess.getTransaction().rollback();
throw e;
}
これは面倒でエラーが発生しやすく、EJBまたはSpringを使用して宣言型トランザクションを実行することが非常に役立つ理由の1つです。