【问题标题】:CodecNotFoundException: Codec not found for requested operation: [date <-> java.util.Date]CodecNotFoundException:未找到请求操作的编解码器:[日期 <-> 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]

我在做什么错了? 如何解决这个问题?任何帮助请...

【问题讨论】:

    标签: cassandra datastax datastax-java-driver


    【解决方案1】:

    您需要传递 com.datastax.driver.core.LocalDate 类型的变量。有关 Java 类型和 CQL 类型之间的映射,请参阅documentation。您可以使用 JDK 8 中的 LocalDate,如果您将使用所谓的 optional codec,则可以使用 Joda 时间包。

    另一种可能性是writedatejava.sql.Date 并注册它以进行直接映射。

    【讨论】:

    【解决方案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);
    }
    

    【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2018-06-08
    • 2017-03-24
    • 2017-02-16
    • 2019-05-27
    • 2017-04-07
    • 2018-01-06
    • 2019-09-30
    • 2017-09-25
    相关资源
    最近更新 更多