我们有一个表格,其中有两列:
user_assignments frozen<list<shift_user_assignment>>,
user_offers frozen<list<shift_user_assignment>>,
和shift_user_assignment
是
CREATE TYPE IF NOT EXISTS shift_user_assignment (
id timeuuid,
note varchar,
breaks frozen<list<shift_break>>)
我有一个名为shift
的数据库实体POJO,它具有这两个属性(忽略其他属性)。
@Column("user_assignments")
private List<UserAssignment> userAssignments;
@Column("user_offers")
private List<UserAssignment> userOffers;
我尝试使用QueryBuilder更新user_assignments
和user_offers
。
Update update = QueryBuilder.update(ShiftById.TABLE_NAME);
update.with(QueryBuilder.set("user_assignments", shift.getUserAssignments()))
.and(QueryBuilder.set("user_offers", shift.getUserOffers()))
.where(QueryBuilder.eq("company_id", companyId))
.and(QueryBuilder.eq("id", shift.getId()));
cassandraTemplate.execute(update)
但我收到了
org.springframework.cassandra.support.exception.CassandraTypeMismatchException: Value 0 of type class java.util.ArrayList does not correspond to any CQL3 type; nested exception is com.datastax.driver.core.exceptions.InvalidTypeException: Value 0 of type class java.util.ArrayList does not correspond to any CQL3 type
at org.springframework.cassandra.support.CassandraExceptionTranslator.translateExceptionIfPossible(CassandraExceptionTranslator.java:84) ~[spring-cql-1.5.3.RELEASE.jar:na]
at org.springframework.cassandra.core.CqlTemplate.potentiallyConvertRuntimeException(CqlTemplate.java:946) ~[spring-cql-1.5.3.RELEASE.jar:na]
at org.springframework.cassandra.core.CqlTemplate.translateExceptionIfPossible(CqlTemplate.java:930) ~[spring-cql-1.5.3.RELEASE.jar:na]
at org.springframework.cassandra.core.CqlTemplate.translateExceptionIfPossible(CqlTemplate.java:912) ~[spring-cql-1.5.3.RELEASE.jar:na]
at org.springframework.cassandra.core.CqlTemplate.doExecute(CqlTemplate.java:278) ~[spring-cql-1.5.3.RELEASE.jar:na]
at org.springframework.cassandra.core.CqlTemplate.doExecute(CqlTemplate.java:559) ~[spring-cql-1.5.3.RELEASE.jar:na]
at org.springframework.cassandra.core.CqlTemplate.execute(CqlTemplate.java:1333) ~[spring-cql-1.5.3.RELEASE.jar:na]
如果我使用Spring Data Cassandra存储实体,则没有问题。 任何线索我应该映射什么/在哪里/如何映射,以便能够使用QueryBuilder更新这两列? 提前谢谢!
答案 0 :(得分:0)
您根本无法更新 Frozen
类型。你只能插入它们。
解决此问题的一种方法是首先获取当前值,将其分配给新的Arraylist,然后使用相同的实体但新列表执行 insert 。 /德尔>
更新1
您应该使用@FrozenValue
注释您的Pojo字段,否则映射器不知道该怎么做。
更新2
您还应该使用@UDT(name="UserAssignment")
注释您的POJOS类型。