java - Spring Data Cassandra 自定义插入查询在“。”失败。在字符串中
问题描述
我编写了一个自定义保存查询,以便我可以在每个项目上添加一个可配置的 TTL。这是我的回购:
@Repository
public interface MyCassandraRepository extends
TypedIdCassandraRepository<MyCassandraItem, UUID> {
@Query("insert into " + TABLE_NAME + " (" + CQL_UUID + ", " + CQL_PLAN + ") values (?0, ?1) using ttl ?2")
MyCassandraItem customSaveWithTtl(UUID uuid, String plan, Integer ttl);
}
这是我的桌子:
CREATE TABLE IF NOT EXISTS my_users.plans (
user_id uuid,
plan text,
PRIMARY KEY (user_id)
) ;
但是,当我尝试添加计划字符串包含句号/句点(例如eyJhbGciOiJIUzUxMiJ9.hsdyu7832uwhjjdsjkdsew2389dhj
)的条目时,我收到以下错误:
org.springframework.cassandra.support.exception.CassandraQuerySyntaxException: line 1:110 mismatched input 'eyJhbGciOiJIUzUxMiJ9' expecting ')' (...plan) values ('c7a8fd65-8ef5-420e-b02e-898fe248bbf3', ''[eyJhbGciOiJIUzUxMiJ9]....); nested exception is com.datastax.driver.core.exceptions.SyntaxError: line 1:110 mismatched input 'eyJhbGciOiJIUzUxMiJ9' expecting ')' (...plan) values ('c7a8fd65-8ef5-420e-b02e-898fe248bbf3', ''[eyJhbGciOiJIUzUxMiJ9]....)
尝试使用 CQLSH 手动添加它,我也得到一个错误与“。”:
SyntaxException: line 1:826 no viable alternative at input '.' (... "plan") VALUES (c7a8fd65-8ef5-420e-b02e-898fe248bbf3, [eyJhbGciOiJIUzUxMiJ9].hsdyu7832uwhjjdsjkdse...)
谁能看到我如何让它添加整个字符串而不仅仅是停在'。'?
解决方案
您可以尝试使用PreparedStatement
String originalPlan = "eyJhbGciOiJIUzUxMiJ9.hsdyu7832uwhjjdsjkdsew2389dhj";
PreparedStatement preparedStatement = cqlTemplate.getSession().prepare("insert into plans (user_id, plan) values (?, ? )");
Statement insertStatement = preparedStatement.bind(UUIDs.timeBased(), originalPlan );
cqlTemplate.execute(insertStatement);
推荐阅读
- flutter - 如何将桌面(macOS 和 Windows)的视频播放器添加到颤振中
- python - 使用列表的全部和部分元素创建组合的 Python 排列
- typescript - 在 Typescript types.d.ts 库定义中使类和函数可互换
- bash - SH - 用变量替换文本值中的单词
- simulation - Webots 中的吸盘模拟
- json - 将txt转换为json文件
- python - 为什么每个 GPU 上都显示单个 pytorch 进程
- c++ - Visual Studio 非 vcxproj 标头仅包含在代码分析中
- distributed - Raft Leader 选举,当candidater 收到带有 Higher Term 的 voteRequest 时,candidater 应该怎么做?
- django - 如何在 django Rest Framework 中从 view.py 提供 SerializerMethodField 输入