插入LongType卡桑德拉使用节俭失败
问题描述:
我试图插入一个longtype列到卡桑德拉:插入LongType卡桑德拉使用节俭失败
Column docid = new Column();
docid.setName("docid".getBytes());
ByteBuffer val = ByteBuffer.allocate(8);
val.putLong(123111111111111111L);
docid.setValue(val);
docid.setTimestamp(System.currentTimeMillis());
client.insert(term, parent, docid, ConsistencyLevel.ONE);
它运行正常,但是当我试图让通过CLI值,则返回
[[email protected]] get Term[utf8('hello')]['docid'] as long;
=> (column=docid, value=, timestamp=1362891987234)
看起来值没有被正确插入。为什么?
我试图插入ASCII类型和它的作品。
答
变化:
docid.setValue(val);
要:
docid.setValue(val.array());
答
也许你已经找到了解决办法,或者你切换到定制列表,但它可以帮助:
把你的长期价值为后字节缓冲区,你忘了翻转()它。 正如在Javadoc解释的,翻转所述缓冲器装置设置限制于当前位置,然后将当前位置设置到零。
如果不翻转,所包含的值读取当前位置(其中插入字节之后是)开始,这就是为什么当你查询它的“价值”是空的。
这里是固定的代码:
val.putLong(123111111111111111L);
val.flip(); // Flip the buffer
docid.setValue(val);
编辑:
val.array()
返回ByteBuffer的内部数组,所以不是翻转缓冲器,设置列的值,以val.array()
也可能工作(但只有如果字节缓冲区没有直接分配)