我在使用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周了。
非常感谢你的帮助。
答案 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,然后您可以通过
轻松获取POJOUser user1 = mgr.find(User.class, email);
假设电子邮件是您的NoSqlId(Cassandra中的主键或行键)。
答案 2 :(得分:0)
我正是使用com.netflix.astyanax.mapping.Mapping和com.netflix.astyanax.mapping.MappingCache来实现此目的。