単一の行を取得している場合は、複合列のタイプを知ることができます:
// Query the composite columns
@SuppressWarnings("rawtypes")
OperationResult<ColumnList<ColumnFamily>> result = null;
try {
result = oKeyspace.getKeyspaceContext().
getEntity().prepareQuery(compTestCF).getRow("12345").execute();
} catch (ConnectionException e1) {
e1.printStackTrace();
}
for (@SuppressWarnings("rawtypes")
Column<ColumnFamily> col : result.getResult()) {
String colClass = ((Object) col.getName()).getClass().getName();
if (colClass.equals(CompositeColumn.class.getName())) {
System.out.println(col.getLongValue());
}
}
上記のように、私の複合列テスト クラスの名前は CompositeColumn です。これが機能する理由は、OperationResult がColumnList<ColumnFamily>
オブジェクトであるためです。各Column<ColumnFamily>
オブジェクトには複合列オブジェクトが名前として含まれているため、CompositeColumn クラス名を見つけることができます。これができるのは、「getRow」または「getKey」呼び出しの結果が RowQuery オブジェクトであるためです。
残念ながら、複数の行が返されたときにこれを行う方法が見つかりませんでした。その場合、ColumnList<ColumnFamily>
行ごとにオブジェクトが生成されることはなく、代わりにColumnList<Object>
オブジェクトが生成されます。これは、スライスまたは範囲のクエリの結果が RowSliceQuery オブジェクトであり、なんらかの理由で同じ機能が得られないためです。col.getName() 呼び出しは、複合列に対して空の文字列を返します。