Dmi*_*san 4 java uuid cassandra spring-data-cassandra timeuuid
我正在尝试保存java.util.UUID到Cassandra类型的列timeuuid.例如,这是一个默认的spring-data-cassandra映射:http://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#mapping-conversion.UUID的值是由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.");
}
Run Code Online (Sandbox Code Playgroud)
这意味着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)