sql >> Databasteknik >  >> RDS >> Oracle

Hur använder man Hibernate Session.doWork(...) för savepoints/kapslade transaktioner?

Den initiala java.sql.SQLException: IJ031040 verkar relaterat till ett specifikt resultat under vår import. Den har senare ersatts med en annan java.sql.SQLException som förbjuder återställning för hanterade transaktioner. Men jag kunde äntligen lösa problemet genom att utfärda inbyggda SQL-satser:

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

Detta tillåter en "kapslad transaktion" inom den större och löste mina problem.



  1. Använder IST-tid i mysql-fråga

  2. MySQL Ogiltigt standardvärde för tidsstämpel när inget standardvärde anges.

  3. MySQL pärla på OSX 10.7 Lion

  4. REGEXP_LIKE konvertering i SQL Server T-SQL