无法从具有时间戳字段的 datastax 中检索数据

Unable to retrieve the data from datastax having timestamp field

我在键空间 myks

中有以下 table
CREATE table IF NOT EXISTS myks.users (
    user_name text,
    email text,
    created_at timestamp,
    updated_at timestamp,
    PRIMARY KEY (user_name)
);

下面是模型class

@Table(value = "users")
public @Data class Users{
    @PrimaryKey
    @Column("user_name")
    @CassandraType(type = DataType.Name.TEXT)
    private String user_name;

    @Column("email")
    @CassandraType(type = DataType.Name.TEXT)
    private String email;

    @Column("created_at")
    @CassandraType(type = DataType.Name.TIMESTAMP)
    private Timestamp created_at;

    @Column("updated_at")
    @CassandraType(type = DataType.Name.TIMESTAMP)
    private Timestamp updated_at;
}

存储库界面

@Repository
public interface UsersRepository extends CrudRepository<Users, String> {
}

将以下值插入 table

Users users = new Users();
LocalDateTime ldt_created = LocalDateTime.now();
LocalDateTime ldt_updated = ldt_created.plus(1000, ChronoUnit.MILLIS);
Timestamp ts_created = Timestamp.valueOf(ldt_created);
Timestamp ts_updated = Timestamp.valueOf(ldt_updated);
users.setUser_name(krishna");
users.setEmail("krishna@gmail.com");
users.setCreated_at(ts_created);
users.setUpdated_at(ts_updated);
usersRepository.save(users);

它已保存在 table 中,但在检索数据时抛出以下异常

No converter found capable of converting from type [java.util.Date] to type [java.sql.Timestamp]

CQL的timestamp类型被映射成java.util.DateJava类型,所以需要用它来代替Timestamp。有关此类型和其他类型,请参阅 CQL to Java mapping table

您还可以使用 so-called 可选编解码器(附加依赖项)将 timestamp 映射到其他 Java 类型,例如 Instant。有关详细信息,请参阅 documentation

java.util.Date 不再用于驱动程序 4.X java-driver-mapper-processor 版本。 Java.time.Instant 被改用。 java.util.Date 中的映射不再起作用,并抛出异常: Field: expiration_date, Entity Type: java.util.Date, CQL type: TIMESTAMP

所以实际的解决方案是对 4.X 使用 Java.time.Instant,对 3.X 使用 java.util.Date