未找到请求操作的编解码器:[durationjava.time.duration]

未找到请求操作的编解码器:[durationjava.time.duration],java,cassandra,datastax,duration,Java,Cassandra,Datastax,Duration,下表 "CREATE TABLE IF NOT EXISTS user_preferences (" + " user_id text," + " my_duration duration," + " last_modified timestamp," + " primary k

下表

  "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*duration与java.time.duration不兼容。所以,您应该在代码中使用驱动程序持续时间类型,或者提供自己的编解码器

这个问题的答案是错误的,但如果你想实现你自己的编解码器,还是很有用的,你必须以这种方式注册它

对于其他java.time类,您需要使用/注册额外的jdk8编解码器:

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

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

请详细说明您的问题,以便人们能够帮助您。com.datasax.driver.extras.codecs.jdk8仅包含:InstantCodec LocalDateCodec LocalDateTimeCodec LocalTimeCodec OptionalCodec ZoneDateTimeCodec ZoneIDCodec默认情况下受支持,无需添加额外的编解码器,但仍然不是wirkingDefault codec返回com.datastax.driver.core.Duration!因为C*duration与java.time.duration不兼容。所以,您应该使用驱动程序持续时间类型或提供自己的编解码器。
com.datastax.driver.core.CodecRegistry.DEFAULT_INSTANCE.register(InstantCodec.instance);