[英]Cassandra says “InvalidQueryException: Invalid version for TimeUUID type” when saving java.util.UUID
我正在嘗試將java.util.UUID
保存到timeuuid
類型的Cassandra列。 例如,這是一個默認的spring-data-cassandra映射: http : //docs.spring.io/spring-data/cassandra/docs/current/reference/html/#mapping-conversion 。 UUID的值由java.util.UUID#randomUUID()
生成java.util.UUID#randomUUID()
我得到一個異常: "com.datastax.driver.core.exceptions.InvalidQueryException: Invalid version for TimeUUID type"
@Override
public void validate(byte[] bytes)
{
if (bytes.length != 16 && bytes.length != 0)
throw new MarshalException(String.format("TimeUUID should be 16 or 0 bytes (%d)", bytes.length));
// version is bits 4-7 of byte 6.
if (bytes.length > 0)
if ((bytes[6] & 0xf0) != 0x10)
throw new MarshalException("Invalid version for TimeUUID type.");
}
這意味着Cassandra timeuuid
類型只接受基於時間的UUID。 由java.util.UUID #randomUUID()生成的值是類型4(偽隨機生成的)UUID,不通過驗證。 所以TimeUUID類按預期工作,但異常原因並不那么明顯。 可能的解決方法:
您應該插入通過datastax驅動程序生成的timeuuid。 在您的情況下,由於您使用的是版本1 timeuuid,因此必須使用
UUIDs.timeBased()
。
資料來源: https : //stackoverflow.com/a/23198388
@CassandraType(type = DataType.Name.UUID)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.