gpt4 book ai didi

java - Cassandra 在保存 java.util.UUID 时说 "InvalidQueryException: Invalid version for TimeUUID type"

转载 作者:搜寻专家 更新时间:2023-11-01 02:02:19 24 4
gpt4 key购买 nike

我正在尝试将 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() 生成我得到一个异常(exception):“com.datastax.driver.core.exceptions.InvalidQueryException:TimeUUID 类型的版本无效”

https://svn.apache.org/repos/asf/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java 学习代码揭示原因:

    @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 类按预期工作,但异常原因并不那么明显。可能的解决方法:

  1. You should insert the timeuuid generated via datastax driver. In your case , since you are using version 1 timeuuid, you must use UUIDs.timeBased() .

来源:https://stackoverflow.com/a/23198388

  1. 或者,如果您通过 spring-data-cassandra 映射实体并需要保存第三方提供的 UUID,请将注解添加到实体字段 @CassandraType(type = DataType.Name.UUID)

关于java - Cassandra 在保存 java.util.UUID 时说 "InvalidQueryException: Invalid version for TimeUUID type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42791730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com