我见过Cassandra entities must have the @Table, @Persistent or @PrimaryKeyClass AnnotationBuild breaks when using cassandra entity with jodatime object但我没有找到答案 .

我在spring boot应用程序上使用spring数据cassandra 1.4.5.RELEASE . 我正在尝试将“复杂类型”作为JSON字符串存储到cassandra中 .

这是创建我的表“test”的CQL:

CREATE TABLE test (
    id uuid PRIMARY KEY,
    co text
}

这是我的实体:

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;
    }
}

这是我的存储库:

import org.springframework.data.repository.CrudRepository;

import java.util.UUID;

public interface TestRepository extends CrudRepository<Test, UUID> {
}

当我启动我的应用程序时,我收到以下错误:

引起:org.springframework.data.cassandra.mapping.VerifierMappingExceptions:ComplexObject:Cassandra实体必须具有@ Table,@ Persistent或@PrimaryKeyClass注释

我想要的是我的“复杂对象”存储在文本列“co”中与其JSON表示 . 我知道Spring Data Cassandra不支持UDT,但我只是要求它存储为“text” .

我已经设法在"text"列中存储了Map>,其中包含@ReadingConverter,@ EditConverter和自定义MappingCassandraConverter来修复问题https://jira.spring.io/browse/DATACASS-349

我想做一些非常相似的事情,但问题不在于转换器 . 不知何故,Spring Data Cassandra似乎相信我的“ComplexType”是一个Cassandra实体,而不是......

难道我做错了什么 ?