2017-03-14 5 views
3

java.util.UUIDtimeuuid 유형의 Cassandra 열에 저장하려고합니다. 예를 들어, 기본 스프링 데이터 캐산드라 매핑은 http://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#mapping-conversion입니다. https://svn.apache.org/repos/asf/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java에서 코드를 학습 "com.datastax.driver.core.exceptions.InvalidQueryException: Invalid version for TimeUUID type"Cassandra가 java.util.UUID를 저장할 때 "InvalidQueryException : 잘못된 버전 TimeUUID 유형"이라고 말합니다

이 이유를 보여준다 :

@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."); 
    } 

답변

4

산드 timeuuid 종류 만 시간 기반 UUID를 허용한다는 것을 의미 UUID의 값 I가 예외가 java.util.UUID#randomUUID() 에 의해 생성된다. java.util.UUID # randomUUID()에 의해 생성 된 값은 유형 4 (의사 임의 생성) UUID이며 유효성 검사를 통과하지 않습니다. TimeUUID 클래스가 예상대로 작동하지만 예외 원인이 명확하지 않습니다. 가능한 해결 방법 :

  1. 당신은 datastax 드라이버를 통해 생성 된 timeuuid를 삽입해야합니다. 귀하의 경우 버전 1 timeuuid를 사용하고 있으므로 UUIDs.timeBased()을 사용해야합니다.

출처 : https://stackoverflow.com/a/23198388

당신이 스프링 데이터 카산드라를 통해 개체를 매핑 및 타사에서 제공하는 UUID를 저장해야하는 경우
  • 또는 추가
      엔티티 필드 주석 (annotation) @CassandraType(type = DataType.Name.UUID)