当与Cassandra一起使用时,Kundera API可以在MyParentObj中处理MyObj吗

当与Cassandra一起使用时,Kundera API可以在MyParentObj中处理MyObj吗,cassandra,kundera,cqlsh,Cassandra,Kundera,Cqlsh,我见过很多昆德拉的例子,其中存储的对象相当简单。您有一个类似Car.class的东西,它包含一对字符串变量,可能是使用@Column注释映射的int。我甚至看到了一些List、Set和Map变量以及cqlsh来创建这些类型的列 我没有看到的是我在一个对象中创建的自定义对象,以及它在Cassandra DB中的表示方式 例如: public Class ContainerShip { @Column(name="container") Container myContainer;

我见过很多昆德拉的例子,其中存储的对象相当简单。您有一个类似Car.class的东西,它包含一对字符串变量,可能是使用@Column注释映射的int。我甚至看到了一些List、Set和Map变量以及cqlsh来创建这些类型的列

我没有看到的是我在一个对象中创建的自定义对象,以及它在Cassandra DB中的表示方式

例如:

public Class ContainerShip {

    @Column(name="container")
    Container myContainer;
}

public Class Container {
    @Column(name="containerName)
    String containerName;
}
我可以使用Kundera和em.persist(myShip)将集装箱船存储到Cassandra吗


如果可以,创建“container”列的cqlsh是什么样子的

您可以将容器对象作为可嵌入实体嵌入

@实体 公营货柜船{

@Column(name="container")
@Embedded
Container myContainer;
}

@可嵌入 公营货柜{

@Column(name="containerName)
String containerName;

}

很有趣。那么Cassandra中容器的列类型是什么呢?它将容器名称存储为containership列族中的一列。基本上,如果希望嵌入自定义对象或对象集合,则意味着添加更多列(宽行)或创建引用(与RDBMS关联相同)。Kundera提供了将自定义对象作为超级列或复合/复合键嵌入的两种方法。您使用的是什么版本的Kundera?2.8.1似乎不起作用,尽管我对您的示例做了进一步的介绍。我尝试在@Column(name=“location”)@嵌入式私有列表容器中执行此操作。在cql中将列创建为“位置列表”。在昆德拉的PropertyAccessorHelper中获得NPE(在第一次注释出kundera.ddl.auto.prepare之后)。这是一个复杂的例子,但如果我不能映射其他对象的列表,我不能推荐Cassandra/Kundera而不是SQLServer/hibernate;-)列表也需要用@ElementCollection注释,在当前的Kundera实现中,这样的嵌入对象将被视为超级列。如果您想使用Cassandra集合支持,只需将对象定义为Map、List和Set。就自定义对象而言,创建一个blob列表,并在客户机级别序列化以存储为字节[]。昆德拉不会为您序列化/反序列化这些对象。要推荐Cassandra而不是SQLServer,您必须有自定义对象以外的原因。谢谢您的时间!