You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Java17+Spring6+DataStax Driver4.17.0后PreparedStatement类型转换异常

解决ClassCastException:DefaultSimpleStatement无法转换为PreparedStatement

问题根源

你的代码中EntityMetaDataBasedQueryBinder.bindFindByIdQuery方法存在明显逻辑错误:QueryCache.findByIdStatement已经返回了PreparedStatement实例,但你却用String.valueOf()把它转成字符串,再通过SimpleStatement.newInstance()生成一个SimpleStatement对象,最后强行将其转换为PreparedStatement——这必然触发类型转换异常,因为SimpleStatement和PreparedStatement是两个完全独立的类,不存在继承或转换关系。

修复方案

直接移除多余的SimpleStatement.newInstance包装逻辑,直接使用QueryCache.findByIdStatement返回的PreparedStatement对象即可。修改后的代码如下:

public BoundStatement bindFindByIdQuery(Map<String, ? extends Object> ids, boolean refreshCache) {
        // 直接获取已准备好的PreparedStatement,无需额外包装
        PreparedStatement statement = instance().findByIdStatement(entityMetaData, refreshCache);
        // 后续参数绑定逻辑保持原有实现即可
        ...
}

补充说明

QueryCache.findByIdStatement方法内部已经通过cassandraConfiguration.getSession(metaData).prepare()生成了合法的PreparedStatement,直接使用该对象就能正常执行参数绑定,生成可执行的BoundStatement,完全不需要额外的转换步骤。

内容的提问来源于stack exchange,提问作者Nayaz J H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:41:11