Spring boot 无法识别Springboot cassandra冻结值
我有一个springboot应用程序,我和cassandra连接在一起。我试图在一个映射内创建一个映射,但得到以下异常。在我看来,即使我使用了Spring boot 无法识别Springboot cassandra冻结值,spring-boot,cassandra,Spring Boot,Cassandra,我有一个springboot应用程序,我和cassandra连接在一起。我试图在一个映射内创建一个映射,但得到以下异常。在我看来,即使我使用了@FrozenValue,它仍在发送cal,但没有关键字冻结 错误 原因:org.springframework.data.cassandra.CassandraInvalidQueryException:查询;CQL[如果不存在,则创建表assessmentsubmissionentity(studentid文本、assessmentid文本、值映射、主
@FrozenValue
,它仍在发送cal,但没有关键字冻结
错误
原因:org.springframework.data.cassandra.CassandraInvalidQueryException:查询;CQL[如果不存在,则创建表assessmentsubmissionentity(studentid文本、assessmentid文本、值映射、主键((studentid、assessmentid));];集合内部不允许使用非冻结集合:映射;嵌套异常为com.datastax.driver.core.exceptions.InvalidQueryException:集合中不允许存在非冻结集合:映射
在org.springframework.data.cassandra.core.cql.CassandraExceptionTranslator.translate(CassandraExceptionTranslator.java:139)~[spring-data-cassandra-2.1.2.RELEASE.jar:2.1.2.RELEASE]
在org.springframework.data.cassandra.core.cql.CassandraAccessor.translate(CassandraAccessor.java:334)~[spring-data-cassandra-2.1.2.RELEASE.jar:2.1.2.RELEASE]
原因:com.datastax.driver.core.exceptions.InvalidQueryException:集合:映射内不允许非冻结集合
在com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:49)~[cassandra-driver-core-3.6.0.jar:na]
代码
@表格
@吸气剂
@塞特
@诺尔格构装师
@AllArgsConstructor
公共类AssessmentSubmissionEntity实现可序列化{
@PrimaryKeyColumn(类型=PrimaryKeyType.PARTITIONED)
私人字符串学生ID;
@PrimaryKeyColumn(类型=PrimaryKeyType.PARTITIONED)
私有字符串assessmentId;
@冻结值
@纵队
私有地图值;
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
AssessmentSubmissionEntity,该实体=(AssessmentSubmissionEntity)o;
返回Objects.equals(studentId,that.studentId)&&
Objects.equals(assessmentId,that.assessmentId)&&
对象.equals(值,即.values);
}
@凌驾
公共int hashCode(){
返回Objects.hash(studentId、assessmentId、value);
}
}
马文
org.springframework.boot
弹簧启动启动器数据卡桑德拉
com.datasax.cassandra
卡桑德拉驱动核心
com.datasax.cassandra
卡桑德拉驱动核心
com.datasax.cassandra
卡桑德拉驱动映射
Cassandra的Spring数据存在问题-它们没有冻结集合的映射。从他们的JIRA中可以看出——它是在一年多前提交的,但在这方面没有进展
我认为唯一的解决方案是使用DataStax的Java驱动程序中的对象映射器,或者通过CQL管理您的表
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);
}
}
<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>