WEB开发网
开发学院WEB开发Jsp Java开发2.0: 使用Amazon SimpleDB实现云存储,第... 阅读

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

 2010-10-26 12:59:16 来源:Web开发网   
核心提示:JPA 中的注释要使这两个对象能够使用 SimpleJPA 并不是很难,首先,Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分(2),我需要通过为每个对象添加 @Entity 注释来将它们变成可持久化的,我也需要在 Race 对象中使用 @OneToMany,以及日期属性 created 和

JPA 中的注释

要使这两个对象能够使用 SimpleJPA 并不是很难。首先,我需要通过为每个对象添加 @Entity 注释来将它们变成可持久化的。我也需要在 Race 对象中使用 @OneToMany,在 Runner 对象中使用 @ManyToOne 来正确定义它们的关系。

@Entity 注释是在类上标注的,而关系注释是在 getter 函数上标注的。这些注释见清单 3 和 4:

清单 3. JPA 注释的 Race

@Entity
public class Race {
  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...
}

在 清单 3 中,我使用 @OneToMany 注释来标注 getRunners 函数。我也在实例 Runner 的 race 属性上定义了一个关系。

在清单 4 中,我用类似的方法注释了 Runner 对象的 getRace 函数。

清单 4. JPA 注释的 Runner

@Entity
public class Runner {
  private String name;
  private String ssn;
  private Race race;

  @ManyToOne
  public Race getRace() {
  return race;
  }

  //other setters and getters left out...
}

大多数数据存储(关系型或非关系型)都需要某种描述数据唯一性的方法。所以如果我将这两个对象存储到数据存储中,我至少需要给它们添加 ID。在清单 5 中,我添加一个类型为 BigInteger 的 id 属性到 Race 域对象。在 Runner 对象中我会使用相同的做法。

清单 5. 给 Race 添加一个 ID

@Entity
public class Race {
  private String name;
  private String location;
  private double distance;
  private List<Runner> runners;
  private BigInteger id;

  @Id
  public BigInteger getId() {
  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。)

上一页  1 2 3 4  下一页

Tags:Java 开发 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接