在 Spring Data Cassandra 中创建语句

问题描述 投票:0回答:1

如何使用

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
而无需手动注入转换器和转换字段?

spring cassandra spring-data-cassandra
1个回答
0
投票
// 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.