首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卡桑德拉在保存InvalidQueryException时说:“TimeUUID类型的无效版本”

卡桑德拉在保存InvalidQueryException时说:“TimeUUID类型的无效版本”
EN

Stack Overflow用户
提问于 2017-03-14 16:40:30
回答 1查看 4.7K关注 0票数 4

我试图将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"

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

代码语言:javascript
复制
    @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.");
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-14 16:40:30

这意味着Cassandra timeuuid类型只接受基于时间的UUID。由java.util.UUID#randomUUID()生成的值是类型4(伪随机生成的) UUID,没有通过验证。因此,TimeUUID类按预期工作,但异常原因并不那么明显。可能的解决办法:

  1. 您应该插入通过datastax驱动程序生成的timeuuid。在您的示例中,由于您使用的是版本1的timeuuid,所以必须使用UUIDs.timeBased()

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

  1. 或者,如果您正在通过spring-data-cassandra映射实体,并且需要保存第三方提供的UUIDs,请将注释@CassandraType(type = DataType.Name.UUID)添加到实体字段中。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42791730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档