набор изменений в БД с использованием реактивного хранилища Кассандры - PullRequest
1 голос
/ 23 февраля 2020

Я пытаюсь сделать несколько смешанных логи c в 2 таблицах Кассандры с Projectreactor и ReactiveCassandraRepository. Таблицы выглядят так:

1) userId (pk) | hashId

2) hashIf (pk) | userId

когда я получаю новый userId, мне нужно изменить это значение в обеих таблицах, используя данные пружины. Я пытаюсь это:

fun change(userId: String, oldUserId: String) {
    userIdToHashRepository
        .findAllByUserId(oldUserId)
        .flatMap { response ->
            // response is object like Check(val userId: String, val hash: String)
            userIdToHashRepository.saveUserIdAndHash(
                userId,
                response.hash
            )
            hashToUserIdRepository.updateUserIdByHash(
                userId,
                response.hash
            )
        }
        .doOnNext {
            userIdToHashRepository.deleteAllByUserId(oldUserId.toString())
        }
        .subscribe()
}

, когда я начинаю с этими значениями в таблицах:

1) userId | hashId
    111     111111

2) hashId | userId
   111111  111

и newUserId=444

Я получаю это:

1) 

    userId | hashId

        111     111111

(строка не добавляется и старая строка не удаляется, это печально)

2) hashId | userId

   111111  444

   111111  111

(строка добавляется, но я хочу удалить старую строку)

Так что, пожалуйста , можете сказать, почему работает только второй метод после flatMap? почему doOnNext не работает?

и как это исправить?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Что делать, если вы делаете что-то подобное? Вы всегда должны звонить по цепочке.

fun change(userId: String, oldUserId: String) {
    userIdToHashRepository
        .findAllByUserId(oldUserId)
        .flatMap ( response ->
            // response is object like Check(val userId: String, val hash: String)
             userIdToHashRepository.saveUserIdAndHash(
                userId,
                response.hash
            )}
         .flatMap( response -> hashToUserIdRepository.updateUserIdByHash(
                userId,
                response.hash
            )
        .doOnNext {
            userIdToHashRepository.deleteAllByUserId(oldUserId.toString())
        }
        .subscribe()
}
0 голосов
/ 23 февраля 2020

Хорошо, вы не знаете почему, но если я поместил каждый "db-вызов" в выражение "then {}", это сработает

...