所以我在Cassandra数据库中有一个UDT:
CREATE TYPE cs4224.OrderLine (
OL_I_ID int,
OL_DELIVERY_D timestamp,
OL_AMOUNT float,
OL_SUPPLY_W_ID int,
OL_QUANTITY int,
OL_DIST_INFO varchar
);
当我查询这个时,我可以获得UDTValue但我不知道如何映射到UDTClass,因为我正在使用Cassandra Java Driver 2.2.0rc3
在2.1中,有一些像tutorial这样的指令。但似乎这个(UDTMapper)已被删除或尚未添加到2.2.0中。怎么能做同样的事情或者只是为了达到同样的效果呢?
非常感谢。
答案 0 :(得分:3)
原来我在2.2.0rc3中根本没有UDTMapper。基本上有一个UDTValue类,我可以使用getInt或类似方法来获取我想要的任何值。代码示例如下:
Map<Integer, UDTValue> ols = row.getMap("o_ols", Integer.class, UDTValue.class);
for (Integer key: ols.keySet()) {
UDTValue ol = ols.get(key);
olIId = ol.getInt("ol_i_id");
olQuantity = ol.getInt("ol_quantity");
olDistInfo = ol.getString("ol_dist_info");
olSupplyWId = ol.getInt("ol_supply_w_id");
olAmount = ol.getFloat("ol_amount");
olSum += olAmount;
newOrderLine = orderLineType.newValue()
.setInt("OL_I_ID", olIId)
.setTimestamp("ol_delivery_d", new Timestamp(now.getTime()))
.setFloat("ol_amount", olAmount)
.setInt("ol_supply_w_id", olSupplyWId)
.setInt("ol_quantity", olQuantity)
.setString("ol_dist_info", olDistInfo);
orderLines.put(key, newOrderLine);
}
希望这对其他人也有帮助。