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集