Spring-Data-Cassandra更新静默失败

时间:2019-06-28 04:08:55

标签: cassandra spring-data-jpa cassandra-3.0 spring-data-cassandra

我正在使用Spring-Data-Cassandra通过单个节点(本地主机)来操纵Cassandra中的数据。但是我遇到的问题是Spring-Date-Cassandra会删除我的更新语句或无提示更新失败。我使用的驱动程序是Apache Cassandra的DataStax Java驱动程序3.6.0。 下面是我创建表的语句

"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);
    }
}

但是,代码始终在代码的最后一行(状态== 1)中失败,在恢复锁定状态(应该为0)之后。我还检查了Cassandra控制台,发现锁定状态仍然是调用reset方法后为1。因此,我假设这是引起Cassandra放弃update命令的问题,因此更新无提示地失败。但我不明白为什么会发生此问题。

0 个答案:

没有答案