在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语句吗?如果是这样的话
答案 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>>
我希望它对你有所帮助