나는 매퍼와 함께 카산드라에 저장된 튜플 데이터 구조에 액세스하려고합니다. 그러나, 나는 할 수 없다. 온라인에서 예제를 찾지 못했습니다.카산드라 - Java 드라이버와 튜플 목록을 구문 분석 할 수 없습니다.
이것은 내가 작성한 테이블 및 데이터입니다.
cqlsh:test> CREATE TABLE test.test_nested (id varchar PRIMARY KEY, address_mapping list<frozen<tuple<text,text>>>);
cqlsh:test> INSERT INTO test.test_nested (id, address_mapping) VALUES ('12345', [('Adress 1', 'pin1'), ('Adress 2', 'pin2')]);
cqlsh:test>
cqlsh:test> select * from test.test_nested;
id | address_mapping
-------+----------------------------------------------
12345 | [('Adress 1', 'pin1'), ('Adress 2', 'pin2')]
(1 rows)
내 매핑 클래스 (빌더, 게터, 세터에 대한 롬복 사용) :
@Builder
@Table(keyspace = "test", name = "test_nested")
public class TestNested {
@PartitionKey
@Column(name = "id")
@Getter
@Setter
private String id;
@Column(name = "address_mapping")
@Frozen
@Getter
@Setter
private List<Object> address_mapping;
}
내 매퍼 클래스 : 공용 클래스 TestNestedStore {
private final Mapper<TestNested> mapper;
public TestNestedStore(Mapper<TestNested> mapper) {
this.mapper = mapper;
}
public void insert(TestNested userDropData) {
mapper.save(userDropData);
}
public void remove(String id) {
mapper.delete(id);
}
public TestNested findByUserId(String id) {
return mapper.get(id);
}
public ListenableFuture<TestNested> findByUserIdAsync(String id) {
return mapper.getAsync(id);
}
}
내가 데이터에 액세스하려고 시험 방법은 다음과 같다 :
@Test
public void testConnection2(){
MappingManager manager = new MappingManager(scyllaDBConnector.getSession());
Mapper<TestNested> mapper = manager.mapper(TestNested.class);
TestNestedStore testNestedStore = new TestNestedStore(mapper);
ListenableFuture<TestNested> fut = testNestedStore.findByUserIdAsync("12345");
Futures.addCallback(fut, new FutureCallback<TestNested>() {
@Override
public void onSuccess(TestNested testNested) {
}
@Override
public void onFailure(Throwable throwable) {
System.out.println("Call failed");
}
});
}
비트, 튜플에 액세스 할 수 없습니다. 이 오류가 발생합니다 :
java.lang.IllegalArgumentException: Error while checking frozen types on field address_mapping of entity com.example.model.TestNested: expected List to be not frozen but was frozen
at com.datastax.driver.mapping.AnnotationChecks.validateAnnotations(AnnotationChecks.java:73)
at com.datastax.driver.mapping.AnnotationParser.parseEntity(AnnotationParser.java:81)
at com.datastax.driver.mapping.MappingManager.getMapper(MappingManager.java:148)
at com.datastax.driver.mapping.MappingManager.mapper(MappingManager.java:105)
나는 또한 private List<TupleValue> address_mapping;
으로 시도했습니다. 하지만 아무 쓸모가 없어!
cassandra의 객체 매퍼를 통해 어떻게 튜플 값에 액세스합니까?