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

r55awzrz  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(339)

我把下表放在键空间里 myks ```
CREATE table IF NOT EXISTS myks.users (
user_name text,
email text,
created_at timestamp,
updated_at timestamp,
PRIMARY KEY (user_name)
);

下面是模型类

@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> {
}

将以下值插入表中

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);

它被保存在表中,但在检索数据时引发了以下异常

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

db2dz4w8

db2dz4w81#

cql的 timestamp 类型Map到 java.util.Date java类型,所以您需要使用它而不是 Timestamp . 请参阅cql到java的Map表以了解此类型和其他类型。
您还可以使用所谓的可选编解码器(附加的依赖项)来Map timestamp 转换为其他java类型,例如, Instant . 有关详细信息,请参阅文档。

相关问题