Как совершить транзакцию по нескольким запросам sql в Rx-java2 jdbc? - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь вставить записи sql в несколько записей с помощью rxjava2-jdbc.Пожалуйста, дайте мне знать, как я могу этого достичь.Я попытался выполнить следующие шаги, но это было безуспешно.

Случай 1)

public class DatabaseRepository {

    private Database db;

    public DatabaseRepository() throws Exception{

        NonBlockingConnectionPool pool =
                Pools.nonBlocking()
                        .maxPoolSize(Runtime.getRuntime().availableProcessors() * 5)
                        .connectionProvider(ConnectionProvider.from("jdbc:oracle:thin:@//rcld19-scan.test.com:1522/TGCD01", "test", "testPassword"))
                        .build();

        this.db = Database.from(pool);

    }

        public Flowable<Integer> insertIntoMultipleTables() {

               Flowable<Integer> insertIntoEmployee=db.update(insert into employee(name, designation) values ("Employee_1","Manager"))
                    .counts()
                    .doOnError(e -> {
                        log.error("Exception while inserting record to employee table: {}", e.getMessage());
                    });

               return db.update(insert into department(name, no_of_employees) values("Management",1))
                    .dependsOn(insertIntoEmployee)
                    .counts()
                    .doOnError(e -> {
                        log.error("Exception while inserting record to department table: {}", e.getMessage());
                    });
        }
}

Я пытаюсь вставить в несколько таблиц как часть одной транзакции.В этом случае сбой при вставке записи в таблицу отдела не приведет к откату данных из первой таблицы

Случай 2)

public class DatabaseRepository {

    private Database db;

    public DatabaseRepository() throws Exception{

        NonBlockingConnectionPool pool =
                Pools.nonBlocking()
                        .maxPoolSize(Runtime.getRuntime().availableProcessors() * 5)
                        .connectionProvider(ConnectionProvider.from("jdbc:oracle:thin:@//rcld19-scan.test.com:1522/TGCD01", "test", "testPassword"))
                        .build();

        this.db = Database.from(pool);

    }
    public Flowable<Tx<Integer>> insertIntoMultipleTables(){

            Flowable<Tx<Integer>>  insertIntoEmployee= db.update(insert into employee(name, designation) values ("Employee_1","Manager"))             
                    .transacted()
                    .counts()
                    .flatMap(tx ->{
                        return tx.update(insert into department(name, no_of_employees) values("Management",1))
                                .counts()
                                .doOnError(e -> log.error("Exception while inserting record to department table: {}",
                                        e.getMessage()));

                    })
                    .doOnError(e -> {
                        log.error("Exception while inserting record to employee table: {}", e.getMessage());
                    });

        }
}

Этот код не работает как транзакция.Любая ошибка SQL в одной из вставок не приводит к откату записей, вставленных в другую таблицу

Мое требование - использование реактивного java2-jdbc. Мне нужно вставить записи в несколько таблиц базы данных. Я не могу найти какие-либодействительные примеры в Git.Пожалуйста, дайте мне знать, если мне нужно сделать что-то по-другому.

...