sql >> Database >  >> RDS >> Oracle

Hoe Hibernate Session.doWork(...) gebruiken voor savepoints / geneste transacties?

De initiële java.sql.SQLException: IJ031040 lijkt gerelateerd aan een specifieke uitkomst tijdens onze import. Het is later vervangen door een andere java.sql.SQLException die het terugdraaien van beheerde transacties verbieden. Maar ik kon het probleem eindelijk oplossen door native SQL-instructies uit te geven:

// 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();
    }
});

Dit maakt een "geneste transactie" binnen de grotere mogelijk en loste mijn problemen op.



  1. PL/pgSQL anoniem codeblok

  2. Rails/Postgresql SQL-verschillen met datums

  3. SSH-tunnel van Python wordt automatisch gesloten

  4. Registreer en voer PostgreSQL 9.0 uit als Windows-service