我正在使用 hbaseTemplate 进行 put 并将 autoFlush 属性设置为 true (它是默认值)并且它工作正常。但是,当我立即在代码中执行 put 和 get 操作时,我没有取回我的对象:(
放函数
hbaseTemplate.execute(tableName, new TableCallback<Object>()
{
@Override
public Object doInTable(HTableInterface table) throws IOException
{
if (contact.getContactID() == null)
{
contact.setContactID(UUID.randomUUID().toString());
}
Put put = new Put(Bytes.toBytes(contact.getCompositeKey()));
if (contact.getFirstName() != null) {
put.add(columnFamilyName, firstName, Bytes.toBytes(contact.getFirstName()));
}
if (contact.getLastName() != null) {
put.add(columnFamilyName, lastName, Bytes.toBytes(contact.getLastName()));
}
if (contact.getContactID() != null) {
put.add(columnFamilyName, contactID, Bytes.toBytes(contact.getContactID()));
}
table.put(put);
return null;
}
});
获取函数
public UserContact getContactByContactId(String contactId)
{
Scan scan = new Scan();
String criteria = contactId;
Filter filter = new SingleColumnValueFilter(columnFamilyName, contactID, CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(criteria)));
scan.setFilter(filter);
UserContact contact = null;
contact = hbaseTemplate.find(tableName, scan, new ResultsExtractor<UserContact>() {
@Override
public UserContact extractData(ResultScanner resultScanner) throws Exception
{
Result result = resultScanner.next();
return loadContact(result);
}
});
然后在客户端我所做的就是
String contactId = "somerandomid";
UserContact contact = new UserContact();
contact.setContactId(contactId);
repo.put(contact);
UserContact c = repo.getContactByContactId(contactId);
// here c is null :(
但是使用外壳我可以看到联系人添加得很好......