Początkowy java.sql.SQLException: IJ031040
wydaje się być związany z konkretnym wynikiem podczas naszego importu. Został on później zastąpiony innym java.sql.SQLException
które zabraniają wycofywania zarządzanych transakcji. Ale w końcu mogłem rozwiązać ten problem, wydając natywne instrukcje 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();
}
});
Pozwala to na „zagnieżdżoną transakcję” w ramach większej i rozwiązało moje problemy.