Cassandra 在保存 java.util.UUID 时说 "InvalidQueryException: Invalid version for TimeUUID type"
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()
生成
我得到一个例外:
"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 class 按预期工作,但异常原因并不那么明显。
可能的解决方法:
You should insert the timeuuid generated via datastax driver. In your case , since you are using version 1 timeuuid, you must use UUIDs.timeBased()
.
来源:
- 或者,如果您通过 spring-data-cassandra 映射实体并需要保存第三方提供的 UUID,请在实体字段中添加注解
@CassandraType(type = DataType.Name.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()
生成
我得到一个例外:
"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 class 按预期工作,但异常原因并不那么明显。
可能的解决方法:
You should insert the timeuuid generated via datastax driver. In your case , since you are using version 1 timeuuid, you must use
UUIDs.timeBased()
.
来源:
- 或者,如果您通过 spring-data-cassandra 映射实体并需要保存第三方提供的 UUID,请在实体字段中添加注解
@CassandraType(type = DataType.Name.UUID)