Aerospike: how do I get record key?
aerospike, java, nosql
Solution
Aerospike uses key and set name to generate unique digest, So it stores only digest.
While inserting one record if you set `writePolicy.sendKey = true` then key will be stored as metadata of record. If one record is inserted with `writePolicy.sendKey = true` then only you will get key in scanCallback().
By default writePolicy.sendKey is false, so by default `scanCallback()` gets null as key. Thats why your `key.userKey.toLong()` gives NullPointerException.
Problem
Aerospike client has scanAll method for reading all rows from it's store. I use it in the folowing code: ``` ScanPolicy policy = new ScanPolicy(); policy.concurrentNodes = true; policy.priority = Priority.DEFAULT; policy.includeBinData = true; policy.scanPercent = 100; client.scanAll(policy, "namespaceName", "setName", new ScanCallback() { @Override public void scanCallback(Key key, Record record) throws AerospikeException { STORE.put(key.userKey.toLong(), record.getValue("binName").toString()); } }); ``` But it is finished with `NullPointerException`, because userKey is null. All other fields are valid as expected. User key is the Long value, that was used for saving data: ``` client.put(writePolicy, new Key("namespaceName", "setName", userKey), new Bin("binName", value)); ``` All is fine, if I do single request like this: ``` client.get(readPolicy, new Key("namespaceName", "setName", userKey)); ``` What may be wrong? Why userKey is null?