sql >> Database teknologi >  >> RDS >> Oracle

Hvordan bruger man Hibernate Session.doWork(...) til savepoints/indlejrede transaktioner?

Den indledende java.sql.SQLException: IJ031040 synes relateret til et specifikt resultat under vores import. Den er senere blevet erstattet med en anden java.sql.SQLException der forbyder tilbagerulning for administrerede transaktioner. Men jeg kunne endelig løse problemet ved at udstede native SQL-sætninger:

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

Dette tillader en "indlejret transaktion" i den større og løste mine problemer.



  1. mysql hvordan man sammenligner dato i formatet dd-man-åå

  2. Udelad funktionsdefinitioner, når du dumper en PostgreSQL-database

  3. mysql_query returnerer kun strengtype for int/fload db-type

  4. Hvornår skal man bruge PDO-forberedte forespørgsler. mysql_real_escape fejl