Я использую 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 после вызова метода сброса.Поэтому я предполагаю, что из-за какой-то проблемы Кассандра сбросила команду обновления, поэтому обновление завершилось неудачно.Но я не могу понять, почему эта проблема происходит.