Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak używać Hibernate Session.doWork(...) dla punktów zapisu / transakcji zagnieżdżonych?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można skompilować PL/SQL za pomocą BULK COLLECT i FORALL

  2. ORA-01792:maksymalna liczba kolumn w tabeli lub widoku wynosi 1000 błędu podczas używania WITH w sql

  3. Dodawanie nazwy schematu do encji w danych Spring?

  4. CRON i SQLPLUS

  5. Czy „Wybierz” zawsze porządkuje według klucza podstawowego?