小编Car*_*tti的帖子

无法使用Java删除以前在Cassandra中使用upsert创建的行

TL; DR是我无法使用Java删除先前使用upsert创建的行.

基本上我有这样一个表:

CREATE TABLE transactions (
key text PRIMARY KEY,
created_at timestamp
);
Run Code Online (Sandbox Code Playgroud)

然后我执行:

String sql = "update transactions set created_at = toTimestamp(now()) where key = 'test' if created_at = null"; 
session.execute(sql)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,行被创建:

cqlsh:thingleme> SELECT * FROM  transactions ;

 key  | created_at
------+---------------------------------
 test | 2018-01-30 16:35:16.663000+0000
Run Code Online (Sandbox Code Playgroud)

但是(这是让我发疯的原因)如果我执行:

sql = "delete from transactions where key = 'test'"; 
ResultSet resultSet = session.execute(sql);
Run Code Online (Sandbox Code Playgroud)

什么都没发生.我的意思是:没有抛出异常而且行仍在那里!

其他一些奇怪的东西:

  • 如果我用普通插入替换upsert,那么删除工作
  • 如果我使用cqlsh直接运行sql代码(更新和删除),它的工作原理
  • 如果我针对EmbeddedCassandraService运行此代码,它可以工作(这非常糟糕,因为我的集成测试只是绿色!)

我的环境:

  • cassandra:3.11.1
  • datastax java驱动程序:3.4.0
  • docker image:cassandra:3.11.1

关于如何解决这个问题的任何想法/建议真的很感激;-)

java cassandra datastax-java-driver

4
推荐指数
1
解决办法
115
查看次数

标签 统计

cassandra ×1

datastax-java-driver ×1

java ×1