1

봄에 Cassandra 용 DAO를 설정하고 있습니다.Cassandra 용 스프링 데이터의 복합 데이터 구조 사용

이제 개체에서 복합 클래스를 여러 번 사용하는 것에 관한 질문이 있습니다.

@Table(value = "settings") 
public class Setting { 

    @PrimaryKey 
    private User owner; 

    @Column("key") 
    private String key; 

    @Column("value") 
    private String value; 

    @Column("updated_by") 
    private User updatedBy; 
} 

그리고 클래스 사용자 :

@PrimaryKeyClass 
public class User implements Serializable{ 

    @PrimaryKeyColumn(name = "userId", ordinal = 0, type = PrimaryKeyType.PARTITIONED) 
    private String id; 

    @PrimaryKeyColumn(name = "userIdType", ordinal = 1, type = PrimaryKeyType.PARTITIONED) 
    private String idType; 
} 

그래서 내가 두 번 클래스 사용자를 사용하고

나는이 클래스 설정을 가지고있다. 일단 기본 키 "소유자"로 한 번 "updatedBy"로.

이 키를 CassandraOperations 클래스에서 사용할 때 기본 키는 정상적으로 작동하지만 다른 키는 작동하지 않습니다.

이미 사용중인 열 이름 userId에 대해 불평합니다. 말이된다. 그럼 어떻게하면됩니까?

아마도 UserDefined 유형을 사용할 수 있습니까?

CREATE TYPE test_keyspace.user (
    id text, 
    id_type text 
); 

하지만 Java Annotations에서 어떻게 할 수 있습니까?

그렇지 않으면 동일한 클래스를 어떻게 재사용 할 수 있습니까? Cassandra의 비교적 간단한 데이터 구조를 고려해 볼 때 User 클래스를 idType.id 같은 단일 문자열로 병합해도 좋습니다.

도움 주셔서 감사합니다.

답변

3

좋아, 찾았습니다 here, denzal으로 대답했습니다.

@UserDefinedType("user_type") 
public class User implements Serializable{ 

    @CassandraType(type = DataType.Name.TEXT) 
    private String id; 

    @CassandraType(type = DataType.Name.TEXT) 
    private IdType idType; 

} 

가 잘 작동 :

@Table("settings") 
public class Setting { 

    @PrimaryKeyColumn(name = "owner", ordinal = 0, type = PrimaryKeyType.PARTITIONED) 
    @CassandraType(type = DataType.Name.UDT, userTypeName = "user_type") 
    private User owner; 

    @PrimaryKeyColumn(name = "key", ordinal = 1, type = PrimaryKeyType.CLUSTERED) 
    @CassandraType(type = DataType.Name.TEXT) 
    private String key; 

    @CassandraType(type = DataType.Name.TEXT) 
    private String value; 

    @CassandraType(type = DataType.Name.UDT, userTypeName = "user_type") 
    private User lastUpdatedBy; 
} 

및 사용자 클래스 : 같은

내 수업은 지금 본다.

+0

또한 TypeCodec이 필요합니다. [여기 예제] (http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/) – Denno