如何将 java.sql.Timestamp 转换为 java.util.UUID?

Vin*_*ran 2 java cassandra

在 cassandra 中,我的列类型之一是 timeuuid,其根据文档等效的 java 类型是 java.util.UUID

我的输入时间为 java.sql.Timestamp ,为了在实体类中设置它,我想转换java.sql.Timestamp -> java.util.UUID

adu*_*tra 5

首先,您提到的文档指的是非常旧版本的 DataStax Java 驱动程序,您应该升级到版本 3.0.0

也就是说,DataStax Java 驱动程序附带了一个实用程序类com.datastax.driver.core.utils.UUIDs. 它具有三种处理基于时间的 UUID 的有用方法:

  1. timeBased(); 为当前时间戳创建一个新的基于时间的 UUID;此方法生成的时间戳适合作为timeuuid值插入 Cassandra 中。
  2. startOf(long)endOf(long):这些方法分别提供给定时间戳的最低和最高可能的 UUID。它们主要适用于查询一系列timeuuid值。

然而,就您的情况而言,您似乎正在从具有固定时间戳的 RDBMS 迁移数据。我建议您始终使用以下方法startOf(long)来迁移数据:

java.sql.Timestamp tp = ...;
UUID uuid = UUIDs.startOf(tp.getTime());
Run Code Online (Sandbox Code Playgroud)

在任何情况下,都不要尝试手动创建此类 UUID,因为 Cassandra 对timeuuid值进行排序的方式与UUID.comapreTo().