Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menggunakan Hibernate Session.doWork(...) untuk savepoints / transaksi bersarang?

java.sql.SQLException: IJ031040 awal tampaknya terkait dengan hasil tertentu selama impor kami. Nanti diganti dengan java.sql.SQLException yang lain yang melarang pengembalian untuk transaksi terkelola. Tapi saya akhirnya bisa memecahkan masalah dengan mengeluarkan pernyataan SQL asli:

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

Ini memungkinkan "Transaksi bersarang" dalam transaksi yang lebih besar dan menyelesaikan masalah saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL membandingkan catatan dalam tabel

  2. Perbandingan tanggal Oracle di mana klausa

  3. Menetapkan nilai LIMIT saat menggunakan pengumpulan massal

  4. Bagaimana cara membuat id dengan AUTO_INCREMENT di Oracle?

  5. Nilai n teratas yang berbeda dari satu kolom di Oracle