gpt4 book ai didi

java - 未找到请求的操作的编解码器 : [duration <-> java. time.Duration]

转载 作者:行者123 更新时间:2023-12-02 09:54:11 27 4
gpt4 key购买 nike

有下表

  "CREATE TABLE IF NOT EXISTS user_preferences (" +
" user_id text," +
" my_duration duration," +
" last_modified timestamp," +
" primary key((id))" +
");";

当尝试保留以下模型时

import com.datastax.driver.mapping.annotations.Column;
import com.datastax.driver.mapping.annotations.PartitionKey;
import com.datastax.driver.mapping.annotations.Table;
import java.time.Duration;

@Table(name = "user_preferences")
public class UserPreferences {

@PartitionKey
@Column(name = "user_id")
private String userId;

@Column(name = "my_duration")
private Duration myDuration;

@Column(name = "last_modified")
private Date lastModified;
}

我收到此编解码器未找到异常。

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [duration <-> java.time.Duration]
at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:57) ~[cassandra-driver-core-3.6.0.jar:na]
at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:25) ~[cassandra-driver-core-3.6.0.jar:na]
at com.datastax.driver.mapping.DriverThrowables.propagateCause(DriverThrowables.java:39) ~[cassandra-driver-mapping-3.6.0.jar:na]
at com.datastax.driver.mapping.Mapper.save(Mapper.java:356) ~[cassandra-driver-mapping-3.6.0.jar:na]

注意:读取工作正常可能是因为表尚未填充。

Datastax-core 3.3.2 支持 java.time.Duration 吗?

<小时/>

最佳答案

评论补充:默认编解码器返回 com.datastax.driver.core.Duration! C* 持续时间与 java.time.Duration 不兼容。因此,您应该在代码中使用驱动程序 Duration 类型或提供您自己的编解码器。

这个特定问题的答案是错误的,但如果您要实现自己的编解码器,则仍然有用,您必须以这种方式注册它。

对于其他 java.time 类,您需要使用/注册额外的 jdk8 编解码器: https://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/extras/

import com.datastax.driver.extras.codecs.jdk8.InstantCodec;
import java.time.Instant;

cluster.getConfiguration().getCodecRegistry()
.register(InstantCodec.instance);

或者如果您无权访问集群对象

com.datastax.driver.core.CodecRegistry.DEFAULT_INSTANCE.register(InstantCodec.instance);

关于java - 未找到请求的操作的编解码器 : [duration <-> java. time.Duration],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56115358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com