1

我不确定我是否以正确的方式使用 @Id 来客观化。现在我使用电子邮件地址作为@Id 字段。电子邮件字段将仅在服务器端设置 (OAuthService.getCurrentUser.getEmail)

第一个问题:这是个好主意吗?

例如,如果我创建一个具有 RegistrationTO 作为其父级的 Item-class,那么在我的 Item-class 中使用电子邮件地址作为 @Id 字段是否有意义,或者 Item-class 是否应该拥有它自己的、自动生成的 id 和指定关系的关键父级?

Objectify-Tutorial 建议避免使用@Parent - 所以,我认为也没有必要。我是对的?

这是我的注册地址:

public class RegistrationTO implements Serializable {
private static final long   serialVersionUID    = 1L;

@NotNull
@Size(min = 5, max = 20)
private String              firstname;

@NotNull
@Size(min = 5, max = 20)
private String              name;

@NotNull
@Size(min = 5, max = 20)
private String              country;

@Id
@NotNull
@Size(min = 5, max = 20)
@Pattern(regexp = "\b[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\b")
private String              email;

public RegistrationTO() {

}

public RegistrationTO(final String firstname, final String name, final String company) {
    this.firstname = firstname;
    this.name = name;
    this.country = country;
    email = "will be set on server (Oauth)";
}

public String getFirstname() {
    return firstname;
}

public String getName() {
    return name;
}

public String getCountry() {
    return country;
}

public String getEmail() {
    return email;
}

public void setEmail(final String email) {
    this.email = email;
}
  }

项目类示例:

public class Item implements Serializable {
private static final long   serialVersionUID    = 1L;

@Id
Long id

//or
//@Id
//String email

Key<RegistrationTO> parent;

String itemno;
    }

先感谢您!

4

1 回答 1

1

关于您使用电子邮件作为@Id 是否正确的问题,因为电子邮件将唯一标识该类的每个对象,那么您很好!

现在,关于您的 Item 类的 @Id,如果电子邮件唯一标识每个对象,则无需创建新的自动生成的 Long as @Id。一般来说,@Id 的选择标准是唯一标识该类的所有对象。

对于 RegistrationTO 和 Item 类之间的关系,只有在需要这些实体是同一个实体组时才使用@Parent 注解。代码:

@Parent
Key<RegistrationTO> parent;

否则,请使用“普通”关系(如您在示例中所使用的),该关系允许 RegistrationTO 和 Item 实体存储在 GAE 数据存储中的不同实体组中。有关实体组的更多信息,请查看: http ://code.google.com/appengine/docs/java/datastore/entities.html#Entity_Groups_and_Ancestor_Paths

希望有帮助!

于 2011-10-27T10:10:16.743 回答