CodecNotFoundException:未找到请求操作的编解码器:[日期 <-> java.util.Date]
Posted
技术标签:
【中文标题】CodecNotFoundException:未找到请求操作的编解码器:[日期 <-> java.util.Date]【英文标题】:CodecNotFoundException: Codec not found for requested operation: [date <-> java.util.Date] 【发布时间】:2019-11-28 09:16:54 【问题描述】:我在 java8 中使用以下 datastax 版本
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.7.2</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>3.7.2</version>
</dependency>
我的表格有一个日期列如下
cass_table (
data_source_id int,
company_id text,
create_date date)
当我尝试将数据保存到 C* 表中时,如下所示
final IndustryCompany four = new IndustryCompany(1,1236, ProdUtils.today());
industryCompanyRepository.save(one);
public static Date today()
return java.sql.Date.valueOf(new SimpleDateFormat(ProducerConstants.DATABASE_DATE_FORMAT).format(Calendar.getInstance().getTime()));
出现错误:
Caused by: com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [date <-> java.sql.Date]
at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:57) ~[cassandra-driver-core-3.7.2.jar:na]
我在做什么错了? 如何解决这个问题?任何帮助请...
【问题讨论】:
【参考方案1】:您需要传递 com.datastax.driver.core.LocalDate
类型的变量。有关 Java 类型和 CQL 类型之间的映射,请参阅documentation。您可以使用 JDK 8 中的 LocalDate
,如果您将使用所谓的 optional codec,则可以使用 Joda 时间包。
另一种可能性是writedate
java.sql.Date
并注册它以进行直接映射。
【讨论】:
谢谢...当我使用版本 4.0.0 而不是当前版本 3.7.2 运行 github.com/lankydan/datastax-java-driver ... 有很多错误... 有没有示例/示例使用版本 4.0.0 ??? 4.x 是 Java 驱动程序的主要重写,它不是二进制兼容的。有关移植的手册有单独的部分:docs.datastax.com/en/developer/java-driver/4.1/upgrade_guide 并且示例在存储库中:github.com/datastax/java-driver/tree/4.x/examples 谢谢,“不兼容二进制”是什么意思?? 您不能简单地将编译后的代码与新的驱动程序版本一起使用,因为有 API 更改【参考方案2】:非常感谢@Alex Ott 正如你建议的那样,我在下面做了
添加了另一个罐子
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-extras</artifactId>
<version>3.7.2</version>
</dependency>
在调用 save() 方法之前我调用了这个
public void registerCodecs()
CodecRegistry registry = this.session.getCluster().getConfiguration().getCodecRegistry();
registry.register(LocalDateCodec.instance);
【讨论】:
你可以看看我的回答***.com/a/45815737/2320144以上是关于CodecNotFoundException:未找到请求操作的编解码器:[日期 <-> java.util.Date]的主要内容,如果未能解决你的问题,请参考以下文章