sql >> Databáze >  >> RDS >> Oracle

Jak používat Hibernate Session.doWork(...) pro body uložení / vnořené transakce?

Počáteční java.sql.SQLException: IJ031040 zdá se, že souvisí s konkrétním výsledkem během našeho importu. Později byla nahrazena jinou java.sql.SQLException které zakazují vrácení pro spravované transakce. Ale nakonec jsem mohl vyřešit problém vydáním nativních SQL příkazů:

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

To umožňuje „vnořenou transakci“ do větší transakce a vyřešilo to mé problémy.



  1. Jak vybrat rozsahy v rozsahu záznamu v oracle

  2. CHYBA 1215:Nelze přidat omezení cizího klíče při použití ON DELETE SET NULL

  3. Jak zjistit, zda funkce v PostgreSQL existuje?

  4. Slick and bonecp:org.postgresql.util.PSQLException:FATAL:omlouváme se, příliš mnoho klientů již došlo k chybě