如何使用
Statement
创建一个 Spring Data Cassandra
,以便 spring 也能处理类型转换?
如果我有一个简单类型的简单查询,我可以写这样的东西:
SimpleStatement.newInstance("UPDATE User SET name = ? WHERE id = ?", "Soheil", 1);
但是当我有一个
UserDefinedType
并且我想创建一个更复杂的查询时,假设表 User
有一个类型为 pictures
的字段 List<frozen<MyPicture>>
,我想使用此查询附加到此列表:
List<MyPicture> pictures = ...;
SimpleStatement.newInstance("UPDATE User SET profilePictures = profilePictures + ? WHERE id = ?", pictures, userId);
我收到一个错误,抱怨它无法正确绑定
pictures
参数。
未找到请求操作的编解码器:[null <-> path.to.package.MyPicture]
因为我已经使用
CassandraRepository
和 @Query
测试了这个查询并成功了,我注意到在这个过程中 Spring
使用 MappingCassandraConverter
将 List<MyPicture>
转换为可用的东西。所以我尝试 @Autowire
转换器的一个实例并转换了我的 List<MyPicture>
:
List<MyPicture> pictures = ...;
Object converted = mappingCassandraConverter.convertToColumnType(pictures);
SimpleStatement.newInstance("UPDATE User SET profilePictures = profilePictures + ? WHERE id = ?", converted, userId);
现在工作正常,没有错误。我想知道是否有一种直接的方法来创建
Statement
而无需手动注入转换器和转换字段?
// Assuming you have a CassandraOperations bean already configured
@Autowired
private CassandraOperations cassandraOperations;
// Example method to update user's profilePictures
public void updateProfilePictures(UUID userId, List<MyPicture> pictures) {
// Use CassandraOperations to create an update statement
Update update = QueryBuilder.update("User")
.with(append("profilePictures", pictures))
.where(QueryBuilder.eq("id", userId));
// Execute the update statement
cassandraOperations.execute(update);
}