最初のjava.sql.SQLException: IJ031040
インポート中の特定の結果に関連しているようです。後で別のjava.sql.SQLException
に置き換えられました 管理対象トランザクションのロールバックを禁止します。しかし、ネイティブSQLステートメントを発行することで、最終的に問題を解決できました。
// Mark the current state as SAVEPOINT...
Session session = this.em.unwrap(Session.class);
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
connection.prepareStatement("SAVEPOINT TRY_POSSIBILITY").executeUpdate();
}
});
//
// Do all the risky changes... verify... decide...
//
// Rollback to SAVEPOINT if necessary!
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
connection.prepareStatement("ROLLBACK TO SAVEPOINT TRY_POSSIBILITY").executeUpdate();
}
});
これにより、大きなトランザクション内に「ネストされたトランザクション」が可能になり、問題が解決しました。