无法使用 java datastax 驱动程序更新
unable to upsert using java datastax driver
我无法使用 datastax
驱动程序 upsert
一行。
Cassandra中的数据table是这样存储的:
tag | partition_info
------------+--------------------------------------------------
sometag | {{year: 2018, month: 1}, {year: 2018, month: 2}}
tag
是主键,partition_info
是 UDT
CREATE TYPE codingjedi.tag_partitions (
year bigint,
month bigint
);
我希望如果 tag
不存在则创建它。如果 tag
存在,那么新的 udt
值将附加到旧值。我想我不能使用 insert
因为它会覆盖以前的值,即这不起作用
QueryBuilder.insertInto(tableName).value("tag",model.tag)
.value("partition_info",setAsJavaSet(Set(partitionsInfo)))
我正在尝试使用更新,但它不起作用。 Datastax
驱动程序为以下查询
提供错误 java.lang.IllegalArgumentException
QueryBuilder.update(tableName).`with`(QueryBuilder.append("partition_info",setAsJavaSet(Set(partitionsInfo))))
.where(QueryBuilder.eq("tag", id.tag))
我尝试使用 add
和 append
作为主键,但出现错误 PRIMARY KEY part tag found in SET part
QueryBuilder.update(tableName).`with`(QueryBuilder.add("tag",id.tag))
.and(QueryBuilder.append("partition_info",setAsJavaSet(Set(partitionsInfo)))) .where(QueryBuilder.eq("tag", id.tag))
您在更新语句中使用了不正确的操作 - 您使用的是 append
,但它用于将数据附加到 list
类型的列。如果您要添加单个值,则可以使用 add
(您的情况,因此您甚至不需要明确地将数据包装到 Set
中),或者如果您要添加 addAll
多个值。
QueryBuilder.update(tableName)
.`with`(QueryBuilder.add("partition_info", partitionsInfo))
.where(QueryBuilder.eq("tag", id.tag))
我无法使用 datastax
驱动程序 upsert
一行。
Cassandra中的数据table是这样存储的:
tag | partition_info
------------+--------------------------------------------------
sometag | {{year: 2018, month: 1}, {year: 2018, month: 2}}
tag
是主键,partition_info
是 UDT
CREATE TYPE codingjedi.tag_partitions (
year bigint,
month bigint
);
我希望如果 tag
不存在则创建它。如果 tag
存在,那么新的 udt
值将附加到旧值。我想我不能使用 insert
因为它会覆盖以前的值,即这不起作用
QueryBuilder.insertInto(tableName).value("tag",model.tag)
.value("partition_info",setAsJavaSet(Set(partitionsInfo)))
我正在尝试使用更新,但它不起作用。 Datastax
驱动程序为以下查询
java.lang.IllegalArgumentException
QueryBuilder.update(tableName).`with`(QueryBuilder.append("partition_info",setAsJavaSet(Set(partitionsInfo))))
.where(QueryBuilder.eq("tag", id.tag))
我尝试使用 add
和 append
作为主键,但出现错误 PRIMARY KEY part tag found in SET part
QueryBuilder.update(tableName).`with`(QueryBuilder.add("tag",id.tag))
.and(QueryBuilder.append("partition_info",setAsJavaSet(Set(partitionsInfo)))) .where(QueryBuilder.eq("tag", id.tag))
您在更新语句中使用了不正确的操作 - 您使用的是 append
,但它用于将数据附加到 list
类型的列。如果您要添加单个值,则可以使用 add
(您的情况,因此您甚至不需要明确地将数据包装到 Set
中),或者如果您要添加 addAll
多个值。
QueryBuilder.update(tableName)
.`with`(QueryBuilder.add("partition_info", partitionsInfo))
.where(QueryBuilder.eq("tag", id.tag))