cassandra springboot冻结列异常

lhcgjxsq  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(402)

我有一个springboot应用程序,我和cassandra连接在一起。我试图创建一个Map内的Map,但得到以下例外。

com.datastax.driver.core.exceptions.InvalidQueryException: Non-frozen collections are not allowed inside collections: map<text, map<text, int>>

代码

@Table
@Data
public class AssessmentSubmissionEntity {

    @PrimaryKey()
    private UUID id;

    @Column
    private Map<String, Map<String,Integer>> assessmentMap;

}

男人

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-cassandra</artifactId>
        </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>
k5hmc34c

k5hmc34c1#

当数据库中有冻结的集合时,还需要将整个列标记为 @Frozen ,或者对于贴图,可以将键或值标记为冻结 @FrozenKey 以及 @FrozenValue 如果你只想冻结Map的特定部分。下面是冻结整个列的示例。

@Table
@Data
public class AssessmentSubmissionEntity {

    @PrimaryKey()
    private UUID id;

    @Frozen
    @Column
    private Map<String, Map<String,Integer>> assessmentMap;    
}

如果只想冻结Map中的数据,则需要将其写入:

@FrozenValue
    @Column
    private Map<String, Map<String,Integer>> assessmentMap;

有关更多信息和示例,请参阅文档。

8i9zcol2

8i9zcol22#

请查看Cassandra2.1.8上的非冻结集合和用户定义类型。
您需要添加冻结关键字:

@Column
private Map<String, frozen Map<String,Integer>> assessmentMap;

相关问题