Cassandra java驱动程序UDT Mapping

时间:2015-10-31 14:09:22

标签: java cassandra

所以我在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中。怎么能做同样的事情或者只是为了达到同样的效果呢?

非常感谢。

1 个答案:

答案 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);
 }

希望这对其他人也有帮助。