快速业务通道

Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
() {   return id;   }   @OneToMany(mappedBy = "race")   public List<Runner> getRunners() {   return runners;   }   //other setters and getters left out... }

清单 5 中的 @Id 注释并没有关于 ID 是如何管理的信息。这样程序就会假设由我手动管理这个 ID,而不是使用 EntityManager 来管理。

进入 SimpleJPA

到现在为止,我还没有进行任何 SimpleDB 的配置。Race 和 Runner 对象都只是使用 JPA 注释进行标注,从而可以存储在任何由 JPA 实现所支持的数据存储中。可选的存储方式包括 Oracle、DB2、MySQL 和(您可能已经猜到的)SimpleDB。

SimpleJPA 是 Amazon 的 SimpleDB 的开源实现。虽然它并不支持完整的 JPA 规范(例如,您不能联合 JPA 查询),但是它支持大量很有用的一部分 JPA 规范。

使用 SimpleJPA 的一个很大的优点是它能够无缝地处理我在 本文的第 1 部分 中所讨论的按字母的问题。SimpleJPA 会对依赖于数字类型的对象进行字符串转换和后续的填充(如果需要)。在大多数情况中,这意味着您不需要修改您的域模型来使用 String 类型。(其中只有一个例外情况,我将在后面进行讨论。)

因为 SimpleJPA 是一个 JPA 实现,您可以很容易在其中使用符合 JPA 的域对象。SimpleJPA 只要求您使用 String ID,这意味着您的 id 属性必须是 java.lang.String。为了简化,SimpleJPA 提供了基本的类 IdedTimestampedBase,它负责管理域对象的 ID 属性,以及日期属性 created 和 updated。(在底层, SimpleDB 会生成一个唯一的 Id。)

Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分(3)

时间:2010-10-26 IBM Andrew Glover

将应用移植到 SimpleJPA

为了使 Race 和 Runner 类兼容 SimpleJPA,我可以扩展 SimpleJPA 便利基础类,或者将每一个类的 id 属性从 BigInteger 修改为 String。我选择了第一种方法,如清单 6 所示:

清单 6. 修改 Race 类为使用 SimpleJPA 的 IdedTimestampedBase 基础类

@Entity public class Race extends IdedTimestampedBase{   private String name;   private String location;   private double distance;   private List<Runner> runners;   @OneToMany(mappedBy = "race")   public List<Runner> getRunners() {   return runners;   }   //other setters and getters left out... }

虽然我不会向您显示 Runner 中相同的代码,但是您可以随时查看这些代码:扩展 IdedTimestampedBase,并删除 Runner 的 id 属性。

修改 Race 和 Runner 的 ID 是使赛跑应用符合 SimpleJPA 规范的第一步。接下来,我需要将基本数据类型(如,double、int 和 float)转换为诸如 Integer 和 BigDecimal 的对象。

我将从修改 Race 的 distance 属性开始。我发现(在当前版本的 SimpleJPA 中)使用 BigDecimal 比 Double 更可靠,所以我将 Race 的 distance 修改为 BigDecimal,如清单 7 所示:

清单 7. 将 distance 修改为 BigDecimal

@Entity public class Race extends IdedTimestampedBase{   private String name;   private String location;   private BigDecimal distance;   private List<Runner> runners;   @OneToMany(mappedBy = "race")   public List<Runner> getRunners() {   return runners;   }   //other setters and getters left out... }

现在 Runner 和 Race 都已经可以通过 SimpleJPA 实现进行持久化了。

使用 SimpleJPA 操作 SimpleDB

使用 SimpleJPA 来处理您的域对象在 SimpleDB 中的存储与使用 JPA

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号