【发布时间】:2018-01-31 01:56:09
【问题描述】:
TL;DR 是我无法删除以前使用 Java 的 upsert 创建的行。
基本上我有这样一张桌子:
CREATE TABLE transactions (
key text PRIMARY KEY,
created_at timestamp
);
然后我执行:
String sql = "update transactions set created_at = toTimestamp(now()) where key = 'test' if created_at = null";
session.execute(sql)
正如预期的那样,该行已创建:
cqlsh:thingleme> SELECT * FROM transactions ;
key | created_at
------+---------------------------------
test | 2018-01-30 16:35:16.663000+0000
但是(这就是让我发疯的原因)如果我执行:
sql = "delete from transactions where key = 'test'";
ResultSet resultSet = session.execute(sql);
什么都没有发生。我的意思是:没有抛出异常,该行仍然存在!
其他一些奇怪的东西:
- 如果我将 upsert 替换为普通插入,则删除有效
- 如果我使用 cqlsh 直接运行 sql 代码(更新和删除),它可以工作
- 如果我针对 EmbeddedCassandraService 运行此代码,它可以工作(这很糟糕,因为我的集成测试只是绿色!)
我的环境:
- 卡桑德拉:3.11.1
- datastax java 驱动:3.4.0
- docker 镜像:cassandra:3.11.1
任何关于如何解决这个问题的想法/建议都非常感谢;-)
【问题讨论】:
标签: java cassandra datastax-java-driver