我见过Cassandra entities must have the @Table, @Persistent or @PrimaryKeyClass Annotation和。{ Build breaks when using cassandra entity with jodatime object但我在那里找不到答案。
我在弹簧启动应用程序中使用了弹簧数据cassandra 1.4.5.RELEASE。 我试图存储"复杂类型"作为cassandra的JSON字符串。
这是创建我的表的CQL" test":
#include <memory>
template <typename Elem>
class Arr_2d
{
public:
Arr_2d(unsigned r, unsigned c)
: rows_(r), columns_(c), data(new Elem[rows_ * columns_]) { }
Elem * operator [] (unsigned row_idx)
{ return(data.get() + (row_idx * columns_)); }
unsigned rows() const { return(rows_); }
unsigned columns() const { return(columns_); }
private:
const unsigned rows_, columns_;
std::unique_ptr<Elem []> data;
};
inline void toggle_one(bool &b) { b = !b; }
void toggle(Arr_2d<bool> &tab, unsigned row, unsigned column)
{
toggle_one(tab[row][column]);
if (column > 0)
toggle_one(tab[row][column - 1]);
if (row > 0)
toggle_one(tab[row - 1][column]);
if (column < (tab.columns() - 1))
toggle_one(tab[row][column + 1]);
if (row < (tab.rows() - 1))
toggle_one(tab[row + 1][column]);
}
int solve(Arr_2d<bool> &tab)
{
int count = 0;
unsigned i = 0;
for ( ; i < (tab.rows() - 1); ++i)
for (unsigned j = 0; j < tab.columns(); ++j)
if (tab[i][j])
{
toggle(tab, i + 1, j);
++count;
}
for (unsigned j = 0; j < tab.columns(); ++j)
if (tab[i][j])
// Impossible.
return(-count);
return(count);
}
unsigned ex1[] = {
0, 1, 0,
1, 1, 1,
0, 1, 0
};
unsigned ex2[] = {
0, 1, 0, 0, 0, 0, 0, 0,
1, 1, 1, 0, 1, 0, 1, 0,
0, 0, 1, 1, 0, 1, 1, 1,
1, 1, 0, 1, 1, 1, 0, 0,
1, 0, 1, 1, 1, 0, 1, 0,
0, 1, 0, 1, 0, 1, 0, 0
};
Arr_2d<bool> load(unsigned rows, unsigned columns, const unsigned *data)
{
Arr_2d<bool> res(rows, columns);
for (unsigned i = 0; i < rows; ++i)
for (unsigned j = 0; j < columns; ++j)
res[i][j] = !!*(data++);
return(res);
}
#include <iostream>
int main()
{
{
Arr_2d<bool> tab = load(3, 3, ex1);
std::cout << solve(tab) << '\n';
}
{
Arr_2d<bool> tab = load(6, 8, ex2);
std::cout << solve(tab) << '\n';
}
return(0);
}
这是我的实体:
CREATE TABLE test (
id uuid PRIMARY KEY,
co text
}
这是我的&#34;复杂对象&#34;:
import com.datastax.driver.core.DataType;
import org.springframework.data.cassandra.mapping.CassandraType;
import org.springframework.data.cassandra.mapping.Column;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
import java.util.UUID;
@Table("test")
public class Test {
@PrimaryKey("id")
private UUID id;
@Column("co")
private ComplexObject co;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
@CassandraType(type = DataType.Name.TEXT)
public ComplexObject getCo() {
return co;
}
public void setCo(ComplexObject co) {
this.co = co;
}
}
这是我的存储库:
public class ComplexObject {
private String value1;
private String value2;
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
public String getValue2() {
return value2;
}
public void setValue2(String value2) {
this.value2 = value2;
}
}
当我启动应用程序时,出现以下错误:
引起: org.springframework.data.cassandra.mapping.VerifierMappingExceptions: ComplexObject:Cassandra实体必须具有@ Table,@ Persistent或 @PrimaryKeyClass Annotation
我想要的是我的&#34;复杂的对象&#34;存储在文本栏中&#34; co&#34;用它的JSON表示。 我知道Spring Data Cassandra还不支持UDT,但我只是要求将它存储为&#34; text&#34;。
我设法存储地图&gt;在&#34;文本&#34;带有@ReadingConverter,@ WritingConverter和自定义MappingCassandraConverter的列来解决问题https://jira.spring.io/browse/DATACASS-349
我想做一些非常相似的事情,但问题还不在于转换器。不知何故,Spring Data Cassandra似乎相信我的&#34; ComplexType&#34;当它不是......时,它是一个Cassandra实体。
我做错了吗?