1
ためカサンドラ@queryを作成します。は、私が<strong>のJava</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();
}
}
。
私が今問題を抱えているのは、に対してSELECTステートメントを実行したいということです。たとえば、1つ、2つ以上のステータスコード(保留中、作業中、確定済みなど)のクエリを実行したいとします。
ステータスコードを1つ以上受け入れる柔軟性を備えた@Queryステートメントを作成するにはどうすればよいですか?
ありがとうございます!!!
EDIT:テーブルステートメントを作成するには、次のとおりです。
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);
ありがとうございます。はい、表示されるエラーは次のとおりです。非主キー列(asignee)のIN述部はまだサポートされていません。別の仕事がありますか? –
これが機能しない場合は、複数のクエリー(cassandraの既知のもの)を使用する必要があります。私はいくつかのドキュメントを見て、in演算子は少なくとも直接cqlでサポートされているので、通常のステートメントを使用したり、複数のステートメントを呼び出すことができます。加えて、ここに似たような質問がありますhttp://stackoverflow.com/questions/27432139/use-datastax-java-driver-to-bind-data-for-where-in-clauseしかし、それは私が必要なので、パーティションキーでのみ動作しますあなたの作成ステートメント;) –
これはセカンダリインデックスでは機能しません。演算子はキーを分割するだけで可能です。ステータスのようなインデックスは、比較的少量のインスタンスごとに多くのインスタンスが存在するため、通常は悪い考えです(ステータスはほんのわずかで、多くの行が含まれている可能性があります)。アクセスごとにデータをモデル化することをお勧めします。また、あなたは本当に平準化圧縮が必要ですか?あなたが物事を更新しようと思っていて、あなたがおそらく意図している "ステータス"フィールドを持っているなら、それはかなり悪いことです。 –