ストアで複数キー操作を行う場合、操作対象のレコードの深さを指定できます。つまり、次の操作対象を指定できます。
指定されたキーとそのすべての子。
指定されたキーとその直下の子。
指定されたキーの直下の子のみ。(指定されたキーは除外されます。)
指定されたキーのすべての子。(指定されたキーは除外されます。)
デフォルトでは、複数キー操作では、指定されたキーとそのすべての子が操作されます。操作をそれ以外に限定するには、たとえば、キーの直下の子のみの場合は、Depth.CHILDREN_ONLY
を操作のDepth
パラメータに指定します。
たとえば、次のキーを使用するとします。
/Products/Hats/-/baseball /Products/Hats/-/baseball/longbill /Products/Hats/-/baseball/longbill/blue /Products/Hats/-/baseball/longbill/red /Products/Hats/-/baseball/shortbill /Products/Hats/-/baseball/shortbill/blue /Products/Hats/-/baseball/shortbill/red /Products/Hats/-/western /Products/Hats/-/western/felt /Products/Hats/-/western/felt/black /Products/Hats/-/western/felt/gray /Products/Hats/-/western/leather /Products/Hats/-/western/leather/black /Products/Hats/-/western/leather/gray
さらに、次のレコードのみを取得するとします。
/Products/Hats/-/baseball /Products/Hats/-/western
これは、適切なDepth
引数を指定してKVStore.multiGet()
を使用することで行えます。
package kvstore.basicExample;
...
import oracle.kv.Depth;
import oracle.kv.Key;
import oracle.kv.RequestTimeoutException;
import oracle.kv.Value;
import oracle.kv.ValueVersion;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.SortedMap;
...
ArrayList<String> majorComponents = new ArrayList<String>();
...
// Define the major and minor path components for the key
majorComponents.add("Product");
majorComponents.add("Hats");
// Create the retrieval key
Key myKey = Key.createKey(majorComponents);
// Now retrieve the records. Note that we do not show the creation of
// the kvstore handle here.
try {
SortedMap<Key, ValueVersion> myRecords = null;
myRecords = kvstore.multiGet(myKey,
null,
Depth.CHILDREN_ONLY
);
} catch (RequestTimeoutException re) {
// The operation was not completed within the
// timeout value
}