Cassandra 无法使用java datastax驱动程序升级

Cassandra 无法使用java datastax驱动程序升级,cassandra,datastax-java-driver,Cassandra,Datastax Java Driver,我无法使用datasax驱动程序upert一行 Cassandra表中的数据存储如下: tag | partition_info ------------+-------------------------------------------------- sometag | {{year: 2018, month: 1}, {year: 2018, month: 2}} tag是主键,partition\u info是UDT CREATE TYPE codingjedi.ta

我无法使用
datasax
驱动程序
upert
一行

Cassandra表中的数据存储如下:

tag        | partition_info
------------+--------------------------------------------------
 sometag | {{year: 2018, month: 1}, {year: 2018, month: 2}}
tag
是主键,
partition\u info
是UDT

CREATE TYPE codingjedi.tag_partitions (
    year bigint,
    month bigint
);
我想知道,如果一个
标记不存在,那么它就会被创建。如果
tag
存在,则新的
udt
值将附加到旧值。我想我不能使用
insert
,因为它会覆盖以前的值,即这将不起作用

QueryBuilder.insertInto(tableName).value("tag",model.tag)
  .value("partition_info",setAsJavaSet(Set(partitionsInfo)))
我正在尝试使用更新,但它不起作用
Datastax
driver为以下查询提供错误
java.lang.IllegalArgumentException

QueryBuilder.update(tableName).`with`(QueryBuilder.append("partition_info",setAsJavaSet(Set(partitionsInfo)))) 
  .where(QueryBuilder.eq("tag", id.tag))
我尝试对主键使用
add
append
,但在SET part中找到了错误
primary key part标签

QueryBuilder.update(tableName).`with`(QueryBuilder.add("tag",id.tag))
      .and(QueryBuilder.append("partition_info",setAsJavaSet(Set(partitionsInfo))))           .where(QueryBuilder.eq("tag", id.tag))

您在update语句中使用的操作不正确-您使用的是
append
,但它用于将数据追加到
list
类型的列中。如果要添加单个值(您的案例,因此您甚至不需要显式地将数据包装到
集合中),则可以使用
add
,如果要添加多个值,则可以使用
addAll

QueryBuilder.update(tableName)
  .`with`(QueryBuilder.add("partition_info", partitionsInfo))
  .where(QueryBuilder.eq("tag", id.tag))

您在update语句中使用的操作不正确-您使用的是
append
,但它用于将数据追加到
list
类型的列中。如果要添加单个值(您的案例,因此您甚至不需要显式地将数据包装到
集合中),则可以使用
add
,如果要添加多个值,则可以使用
addAll

QueryBuilder.update(tableName)
  .`with`(QueryBuilder.add("partition_info", partitionsInfo))
  .where(QueryBuilder.eq("tag", id.tag))

我尝试使用add,但在SET part中发现了错误
主键部分标记
-
QueryBuilder.update(tableName)。
(QueryBuilder.add(“tag”,id.tag”))和(QueryBuilder.append(“partition_info”,setAsJavaSet(SET(partitionsInfo))
谢谢。为什么我必须删除
setAsJavaSet(Set(partitionsInfo))
?我以为你在插入一个值。如果您在那里有多个值,那么只需使用
addAll(setAsJavaSet(Set(partitionsInfo)))
。模式是
CREATE TABLE codingjedi.partitions\u of a\u标记(标记文本主键,分区信息集)
。由于
partition\u info
是一组
UDT
,所以我在做
setAsJavaSet(set(partition\u info))
,尽管我只插入了一个值。删除它并使用add使其工作。我理解
add
的逻辑,但不理解为什么我还必须删除
setAsJavaSet(Set…)
。您需要删除它,因为您添加的是一个元素,它只是UDT,而不是UDTsI尝试使用add的集合,但在Set part中找到了错误
主键部分标记
-
QueryBuilder.update(tableName).
(QueryBuilder.add(“tag”,id.tag)))和(QueryBuilder.append(“partition_info”,setAsJavaSet(Set(partitionsInfo)))
谢谢。为什么我必须删除
setAsJavaSet(Set(partitionsInfo))
?我以为你在插入一个值。如果您在那里有多个值,那么只需使用
addAll(setAsJavaSet(Set(partitionsInfo)))
。模式是
CREATE TABLE codingjedi.partitions\u of a\u标记(标记文本主键,分区信息集)
。由于
partition\u info
是一组
UDT
,所以我在做
setAsJavaSet(set(partition\u info))
,尽管我只插入了一个值。删除它并使用add使其工作。我理解
add
的逻辑,但不理解为什么我还必须删除
setAsJavaSet(Set…)
。您需要删除它,因为您添加的是一个元素,它只是UDT,而不是UDT集