如何在Cassandra中存储对象数组

时间:2018-03-16 18:35:20

标签: java cassandra arrayofstring

在cassandra DB中我计划存储一个对象数组。什么是最好的方法。对象映射到java中的模型类的数据映射。

Class Test{
   @Column(name = "id")
   int id,
   @Column(name = "name")
   String name,
   Address[] address

 class Address{
   String add1,
   String city,
   String state 
  }
}

我是否应该通过向add1,city,state添加列到同一个键空间来将所有(id,name,add1,city,state)放在一个表中?或添加新表的地址 要么 任何其他选择..

我尝试添加TYPE但是将错误抛出为:“服务器出错:代码= 2200 [Invalid query] message="A user type cannot contain non-frozen UDTs” 根据错误和类型语法,我使用了关键字“frozen”,但没有运气。更改表也会给出类似的错误:“mismatched input 'frozen' expecting EOF

另外, 如果我必须保存'String[ ]'类型的列,因为它不是像Address []这样的自定义类型。它是字符串或文本。?我们需要添加alter语句吗?如果是这样的话

2 个答案:

答案 0 :(得分:2)

对于您的情况,首先,您需要在Cassandra中创建一个UDT(用户定义的类型)。

Create TYPE address(
   add1 text,
   city text,
   state text
);

然后创建一个包含此UDT的表。

Create table Test(
   id int,
   name text,
   address list<frozen<address>>,
   primary key(id)
);

如果您想了解有关UTD和用法的更多信息,请访问以下链接:

修改

  

另外,如果我必须保存类型为'String []'的列,该怎么办?因为它不是像Address []这样的自定义类型。它是字符串或文本。?我们需要添加alter语句吗?如果是这样的话

回答Alter table test add stringarr list<text>点击此链接可了解有关cassandra数据类型的更多信息:CQL data types

答案 1 :(得分:0)

您可以创建UDT类型:

CREATE TYPE people (
    name text,
    address
);

现在声明你的字段

people set<frozen <people>>

我希望它对你有所帮助