1

我正在使用 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 :(

但是使用外壳我可以看到联系人添加得很好......

4

0 回答 0