【问题标题】:Springboot cassandra frozen value not recognisedSpringboot cassandra冻结值无法识别
【发布时间】:2019-04-17 01:51:49
【问题描述】:

我有一个与 cassandra 连接的 springboot 应用程序。我正在尝试在地图内创建地图,但出现以下异常。在我看来,即使我使用@FrozenValue,它仍然会发送没有关键字frozen的cal

错误

Caused by: org.springframework.data.cassandra.CassandraInvalidQueryException: Query; CQL [CREATE TABLE IF NOT EXISTS assessmentsubmissionentity (studentid text, assessmentid text, values map<text, map<text, text>>, PRIMARY KEY ((studentid, assessmentid)));]; Non-frozen collections are not allowed inside collections: map<text, map<text, text>>; nested exception is com.datastax.driver.core.exceptions.InvalidQueryException: Non-frozen collections are not allowed inside collections: map<text, map<text, text>>
    at org.springframework.data.cassandra.core.cql.CassandraExceptionTranslator.translate(CassandraExceptionTranslator.java:139) ~[spring-data-cassandra-2.1.2.RELEASE.jar:2.1.2.RELEASE]
    at org.springframework.data.cassandra.core.cql.CassandraAccessor.translate(CassandraAccessor.java:334) ~[spring-data-cassandra-2.1.2.RELEASE.jar:2.1.2.RELEASE]
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Non-frozen collections are not allowed inside collections: map<text, map<text, text>>
    at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:49) ~[cassandra-driver-core-3.6.0.jar:na]

代码

@Table
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class AssessmentSubmissionEntity implements Serializable {

    @PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED)
    private String studentId;

    @PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED)
    private String assessmentId;

    @FrozenValue
    @Column
    private Map <String, Map<String, String>> values;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AssessmentSubmissionEntity that = (AssessmentSubmissionEntity) o;
        return Objects.equals(studentId, that.studentId) &&
                Objects.equals(assessmentId, that.assessmentId) &&
                Objects.equals(values, that.values);
    }

    @Override
    public int hashCode() {

        return Objects.hash(studentId, assessmentId, values);
    }
}

Maven

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-cassandra</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.datastax.cassandra</groupId>
                    <artifactId>cassandra-driver-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-mapping</artifactId>
        </dependency>

【问题讨论】:

    标签: spring-boot cassandra


    【解决方案1】:

    这是 Cassandra 的 Spring Data 的一个问题 - 他们没有冻结集合的映射。请参阅他们的 JIRA 中的DATACASS-465 - 它已在一年多前提交,但没有任何进展......

    我认为唯一的解决方案是使用 DataStax 的 Java 驱动程序中的 Object Mapper,或者通过 CQL 管理您的表。

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2019-10-13
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多