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);
답변 해 주셔서 감사합니다. 예, 표시되는 오류는 다음과 같습니다. 1 차 키가 아닌 컬럼 (asignee)의 IN 술어는 아직 지원되지 않습니다. 또 다른 workound가있다? –
이것이 작동하지 않는다면 여러 번의 쿼리 (cassandra와 함께 알려진 것)를 사용해야 할 것입니다. 단지 create 문을 보여 주시면 감사하겠습니다. 일부 문서를 보았을 때 in 연산자는 최소한 cql에서 직접 지원되므로 일반 문을 사용하거나 문을 여러 번 호출 할 수 있습니다. 거기에 비슷한 질문이 여기에있다 http://stackoverflow.com/questions/27432139/use-datastax-java-driver-to-bind-data-for-where-in-clause하지만 그것은 단지 파티션 키에 내가 필요하므로 당신의 create 문;) –
이것은 보조 인덱스에서 작동하지 않습니다. 연산자는 키를 분할 할 때만 가능합니다. 상태와 같은 색인은 일반적으로 나쁜 아이디어입니다. 왜냐하면 상대적으로 작은 항목 당 인스턴스가 많기 때문입니다 (아마도 몇 가지 상태가있을뿐 아니라 많은 행을 포함하고있을 수 있습니다). 액세스 당 데이터를 모델화하는 것이 좋습니다. 또한 평평한 압축이 정말로 필요합니까? 당신이 물건을 업데이트 할 계획이라면 당신은 아마도 당신이 의도하는 "상태"필드를 가지고 있다면 그것은 나쁘다. –