Обновление Spring-Data-Cassandra происходит молча - PullRequest
0 голосов
/ 28 июня 2019

Я использую Spring-Data-Cassandra для манипулирования данными в Cassandra с помощью одного узла (localhost).Но проблема, с которой я столкнулся, заключается в том, что Spring-Date-Cassandra пропустит мое заявление об обновлении или обновление завершится неудачно. Драйвер, который я использую, - это драйвер DataStax Java 3.6.0 для Apache Cassandra.Ниже приведено утверждение, что я создаю таблицу

"CREATE TABLE IF NOT EXISTS " + keyspace
            + ".insurance_lock(lockId int, lockStatus int, PRIMARY KEY (lockId))"

Здесь находится хранилище, которое я собираюсь использовать

public interface LockRepository extends CrudRepository<LockEntity, Integer> {

@Query("update insurance.insurance_lock set lockstatus = 1 where lockid = 1 if lockstatus = 0")
public boolean lock();

@Query("update insurance.insurance_lock set lockstatus = 0 where lockid = 1")
public void unlock();

}

Ниже приведен тестовый код для запуска.Внутри dbController будет вызываться метод lockRepository для изменения статуса блокировки.

@Test
public void updateLockStatusTest(){
    for (int i = 0; i < 100; ++i) {
        lockRepository.deleteAll();
        LockEntity lockEntity = new LockEntity(1, 0);
        lockRepository.save(lockEntity);
        boolean updated = dbController.lock();

        lockEntity = lockRepository.findById(1).orElse(null);
        Assert.assertTrue(1 == lockEntity.getLockStatus());
        Assert.assertEquals(true, updated);
        updated = dbController.lock();
        Assert.assertEquals(false, updated);
        Assert.assertTrue(1 == lockRepository.findById(1).orElse(null).getLockStatus());
        dbController.unlock();

        Integer status = lockRepository.findById(1).orElse(null).getLockStatus();
        Assert.assertTrue(0 == status);
        updated = dbController.lock();
        Assert.assertEquals(true, updated);
        Assert.assertTrue(1 == lockRepository.findById(1).orElse(null).getLockStatus());

        dbController.unlock();
        status = lockRepository.findById(1).get().getLockStatus();
        Assert.assertTrue(0 == status);
    }
}

Однако код всегда завершался с ошибкой в ​​последней строке кода, то есть status == 1, после остального состояния блокировки, котороедолжно быть 0. И я также проверил с консолью Cassandra, обнаружил, что состояние блокировки по-прежнему 1 после вызова метода сброса.Поэтому я предполагаю, что из-за какой-то проблемы Кассандра сбросила команду обновления, поэтому обновление завершилось неудачно.Но я не могу понять, почему эта проблема происходит.

...