2017-02-02 1 views
1

에 대한 카산드라 @query을 만듭니다.내가 <strong>자바</strong> 앱에 <strong>datastax 드라이버</strong>를 사용하여 <strong>카산드라</strong> 데이터베이스에 <strong><em>SELECT</em></strong>을 수행하기 위해 노력하고 하나 이상의 @params

@Repository 
public class CustomTaskRepository 
    extends AbstractCassandraRepository<CustomTask> { 

    @Accessor 
    interface ProfileAccessor { 
     @Query("SELECT * FROM tasks where status = :status") 
     Result<CustomTask> getByStatus(@Param("status") String status); 
    } 

    public List<CustomTask> getByStatus(String status) { 
     ProfileAccessor accessor = this.mappingManager.createAccessor(ProfileAccessor.class); 
     Result<CustomTask> tasks = accessor.getByStatus(status); 
     return tasks.all(); 
    } 
} 

그게 전부가 좋은 작품 :

는 이미 같은 간단한 쿼리를 개발했다.

내가 지금 가지고있는 문제는 내가 하나 개 이상의 상태에 대한 문 을 선택 실행할 것입니다. 예를 들어 하나, 둘 또는 그 이상의 상태 코드 (보류 중, 작동 중, 완료 중 등)에 대한 쿼리를 실행하고 싶습니다.

하나 이상의 상태 코드를 허용하는 유연성으로 @Query 문을 어떻게 만들 수 있습니까?

미리 감사드립니다.

편집 : 테이블 문을 생성은 다음과 같습니다

CREATE TABLE tasks(
"reservation_id" varchar, 
"task_id" UUID, 
"status" varchar, 
"asignee" varchar, 
PRIMARY KEY((reservation_id),task_id) 
) 

WITH compaction = {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'} ; 


CREATE INDEX taskid_index ON tasks(task_id); 
CREATE INDEX asignee_index ON tasks(asignee); 

답변

2

대신 =의 IN 사용해보십시오. 이것이 파티션 키인 경우, 필요한 행을 가져옵니다. 또한 상태가 많이있는 경우 성능이 저하 될 수 있습니다.

+0

답변 해 주셔서 감사합니다. 예, 표시되는 오류는 다음과 같습니다. 1 차 키가 아닌 컬럼 (asignee)의 IN 술어는 아직 지원되지 않습니다. 또 다른 workound가있다? –

+1

이것이 작동하지 않는다면 여러 번의 쿼리 (cassandra와 함께 알려진 것)를 사용해야 할 것입니다. 단지 create 문을 보여 주시면 감사하겠습니다. 일부 문서를 보았을 때 in 연산자는 최소한 cql에서 직접 지원되므로 일반 문을 사용하거나 문을 여러 번 호출 할 수 있습니다. 거기에 비슷한 질문이 여기에있다 http://stackoverflow.com/questions/27432139/use-datastax-java-driver-to-bind-data-for-where-in-clause하지만 그것은 단지 파티션 키에 내가 필요하므로 당신의 create 문;) –

+1

이것은 보조 인덱스에서 작동하지 않습니다. 연산자는 키를 분할 할 때만 가능합니다. 상태와 같은 색인은 일반적으로 나쁜 아이디어입니다. 왜냐하면 상대적으로 작은 항목 당 인스턴스가 많기 때문입니다 (아마도 몇 가지 상태가있을뿐 아니라 많은 행을 포함하고있을 수 있습니다). 액세스 당 데이터를 모델화하는 것이 좋습니다. 또한 평평한 압축이 정말로 필요합니까? 당신이 물건을 업데이트 할 계획이라면 당신은 아마도 당신이 의도하는 "상태"필드를 가지고 있다면 그것은 나쁘다. –

관련 문제