Java 开发 2.0: 使用 Amazon SimpleDB 实现云存储,第 2 部分:使用 SimpleJPA 实现简单对象持久化
2010-09-16 00:00:00 来源:WEB开发网清单 12. 使用 SimpleJPA 处理关系
Runner runner = new Runner();
runner.setName("Mark Smith");
runner.setSsn("555-55-5555");
runner.setRace(race);
race.addRunner(runner);
em.persist(runner);
em.persist(race); //update the race now that it has a runner
从 清单 12 我们也可以看到,我需要更新 Race 实例,这样我所添加的 Runner 才会被存储起来(同时,我给 Race 函数添加了一个 addRunner 函数,它只是直接将一个 Runner 添加到 Runner 内部的 Collection。)
再一次,如果我通过它的实例搜索一个比赛,我也可以得到它的一组选手,如清单 13 所示:
清单 13. 更多有趣的关系操作!
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 races : race){
System.out.println(race);
List<Runner> runners = race.getRunners();
for(Runner rnr : runners){
System.out.println(rnr);
}
}
使用 EntityManager 实例使我能够通过 remove 函数删除一些实体,如清单 14 所示:
清单 14. 删除一个类的实例
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 races : race){
em.remove(race);
}
当我在 清单 14 中删除了一个 Race 实例,所关联的 Runners 并没有删除。(当然,我可以使用 JPA 的 EntityListeners 注释来处理这个问题,这意味着我可以监控删除事件,在事件发生时删除 Runner 实例。)
结束语
这篇 SimpleDB 的快速教程向您介绍了如何使用 Amazon Web Services API 和 SimpleJPA 来处理非关系数据存储的对象。SimpleJPA 实现了一部分的 Java Persistence API 来简化 SimpleDB 的对象持久化。您已经看到,使用 SimpleJPA 的其中一个好处是它能够自动地将基本数据类型转换为 SimpleDB 能识别的字符串对象。SimpleJPA 也能够自动地处理 SimpleDB 中的非联合规则,从而简化它的关系建模。SimpleJPA 扩展的监听接口也使它能够实现逻辑数据统一规则,这是您在关系数据库所希望使用的。
SimpleJPA 的关键是它能够帮助您快速简单且廉价地实现重要的可扩展性。通过 SimpleJPA,您可以在非关系的、基于云的存储环境中利用您在多年的工作中所接触到的诸如 Hibernate 等框架的知识。
更多精彩
赞助商链接