使用Astyanax将Cassandra查询结果转换为POJO

时间:2013-05-31 04:17:29

标签: java nosql mapping cassandra astyanax

我在使用Cassandra和Astyanax客户端的Spring Web应用程序中工作。我想将从Cassandra查询中检索到的结果数据转换为POJO,但我不知道哪个库或Astyanax API支持这个。
例如,我有User列族(CF),其中包含一些基本属性(username, password, email),其他相关的附加信息可以添加到此CF.然后我通过使用OperationResult>从该CF获取一个用户行。保留返回的数据,如下所示:

OperationResult<ColumnList<String>> columns = getKeyspace().prepareQuery(getColumnFamily()).getRow(rowKey).execute();  

接下来我要做的是将“列”填充到我的User对象中。在这里,我有两个问题,请你帮我解决一下:

1 /用户类保存从用户CF检索的相应数据的最佳结构是什么?我的建议是:

public class User {
    String userName, password, email; // Basic properties
    Map<String, Object> additionalInfo;
}  

2 /如何通过使用通用方法将Cassandra数据转换为此POJO(以便它可以应用于已映射POJO的每个CF)?
我很抱歉,如果我的问题中有一些愚蠢的虚假事物,因为我刚刚接触NoSQL概念,Cassandra以及Astyanax已经有2周了。
非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

你可以试试Achilles:https://github.com/doanduyhai/achilles,一个符合JPA标准的Cassandra实体经理

目前,通过Hector使用Thrift API有一个完整的实现。

使用Datastax Java Driver的CQL3实现正在进行中。测试版将在几个月内(2013年7月至8月)提供

CQL3很棒,但它仍然太低,因为你需要自己从ResultSet中提取数据。这就像回到只有JDBC模板可用的时候。

阿基里斯在那里填补空白。

答案 1 :(得分:0)

我建议您使用像Playorm这样的库,使用它可以轻松地对您的实体执行CRUD操作。有关如何创建用户对象的示例,请参阅this,然后您可以通过

轻松获取POJO
User user1 = mgr.find(User.class, email);

假设电子邮件是您的NoSqlId(Cassandra中的主键或行键)。

答案 2 :(得分:0)

我正是使用com.netflix.astyanax.mapping.Mapping和com.netflix.astyanax.mapping.MappingCache来实现此目的。