2016-03-18 3 views
1

В Кассандре, один мой тип столбца timeuuid которого ява типа эквивалент согласно documentation является java.util.UUIDКак преобразовать java.sql.Timestamp в java.util.UUID?

У меня есть время ввода в java.sql.Timestamp и для того, чтобы установить его в классе сущностей, Я хочу преобразовать java.sql.Timestamp -> java.util.UUID.

ответ

3

Прежде всего, упомянутая документация относится к очень старой версии драйвера Java DataStax, вы должны обновить ее до version 3.0.0.

При этом драйвер DataStax Java поставляется с полезным классом, com.datastax.driver.core.utils.UUIDs. Он имеет три полезных метода для работы с UUID с временным основанием:

  1. timeBased(); создает новый UUID на основе времени для текущей метки времени; временные метки, сгенерированные этим методом, могут быть вставлены в Cassandra как значения timeuuid.
  2. startOf(long) и endOf(long): эти методы обеспечивают соответственно наименьшие и наивысшие возможные UUID для заданной временной метки. Они подходят главным образом для запроса диапазона значений timeuuid.

В вашем случае, однако, похоже, что вы переносите данные из РСУБД с фиксированными отметками времени. Я полагаю, что вы последовательно использовать startOf(long) перенести данные:

java.sql.Timestamp tp = ...; 
UUID uuid = UUIDs.startOf(tp.getTime()); 

В любом случае не пытайтесь создавать такие UUID, вручную, как способ Cassandra сортирует timeuuid значения не совместимы с UUID.comapreTo().

+0

Я не использую драйвер DAta Stax, я использую бережливый клиент, что я могу сделать в этом случае? –

+1

В этом случае поместите диск-драйвер DataStax в свой путь к классам, чтобы использовать класс 'UUIDs'. – adutra

+0

@VinodJayachandran вы должны действительно рассмотреть возможность использования более нового драйвера. Thrift RPC по умолчанию отключен от Cassandra 2.2. – Aaron

0
java.sql.Timestamp tp =new java.sql.Timestamp(Calendar.getInstance().getTimeInMillis()); 
System.out.println(tp); 
java.util.UUID uid= new java.util.UUID(tp.getTime(),0); 
System.out.println(uid); 
0

Цитирование https://docs.datastax.com/en/cql/3.0/cql/cql_reference/valid_literal_r.html

timeuuid

Использует время в 100 интервалах наносекунд, поскольку 00: 00: 00.00 UTC (60 бит), порядковый номер часов для предотвращения дубликатов (14 бит), плюс MAC-адрес IEEE 801 (48 бит) для генерации уникального идентификатора. Например: d2177dd0-eaa2-11de-a572-001b779c76e3

Таким образом, timeuuid включает в себя больше, чем просто метку времени, а это означает, что вы могли бы потенциально генерировать некоторые UUID из java.sql.Timestamp, но это не будет соответствовать любому timeuuid в базе данных.

0

Вы можете создать java.util.UUID, используя java.sql.Timestamp как семя.

Однако это не преобразование, так как каждый раз, когда вы создаете новый UUID, он будет другим.

Смежные вопросы