Java 开发 2.0: 使用 Amazon SimpleDB 实现云存储,第 2 部分:使用 SimpleJPA 实现简单对象持久化
2010-09-16 00:00:00 来源:WEB开发网清单 9. 创建一个 Race
Race race = new Race();
race.setName("Charlottesville Marathon");
race.setLocation("Charlottesville, VA");
race.setDistance(new BigDecimal(26.2));
em.persist(race);
在 清单 9 中,SimpleJPA 处理了所有 HTTP 请求来在云中创建 Race。使用 SimpleJPA 意味着我也能够使用一个 JPA 查询来查询比赛,如清单 10 所示。(记住您不能够联合这些查询,但是我仍然可以使用数字进行搜索。)
清单 10. 根据实例查找一个比赛
Query query = em.createQuery("select o from Race o where o.distance = :dist");
query.setParameter("dist", new BigDecimal(26.2));
List<Race> races = query.getResultList();
for(Race race : races){
System.out.println(race);
}
从数字到字符串
例如,SimpleJPA 内部的数字到字符串转换的方法是非常有用的,如果您在 SimpleJPA 中启用查询输出,那么您可以看到有哪些查询发送到 SimpleDB。所提交的查询如清单 11 所示。注意 distance 是如何编码的。
清单 11. SimpleJPA 很好地处理数字!
amazonQuery: Domain=b50-Race, query=select * from `b50-Race`
where `distance` = '0922337203685477583419999999999999928946'
自动填充和编码使开发更加简单,您不觉得吗?
SimpleJPA 中的关系
即使 SimpleDB 不允许查询中进行域联合,您也仍然可以在域中使用关联项。正如我在 第 1 部分 中介绍的,您在一个对象中存储另一个相关对象的键,然后在您需要时查询这个对象。这也正是 SimpleJPA 所做的。例如,之前我向您介绍了如何使用 JPA 注释将 Runner 链接到一个 Race。因此,我可以创建一个 Runner 实例,将现有的 race 添加到这个实例,然后再存储 Runner 实例,如清单 12 所示:
更多精彩
赞助商链接