Objectify并发送电子邮件为@Id

时间:2011-09-29 14:43:41

标签: google-app-engine gwt objectify

我不确定我是否以正确的方式使用@Id。 现在我使用eMail-Address作为@Id字段。电子邮件字段仅在服务器端设置(OAuthService.getCurrentUser.getEmail)

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

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

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

这是我的RegistrationTO:

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;
}
  }

Item类的示例:

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

@Id
Long id

//or
//@Id
//String email

Key<RegistrationTO> parent;

String itemno;
    }

提前谢谢!

1 个答案:

答案 0 :(得分:1)

关于你的问题,如果使用电子邮件作为@Id是否正确,因为电子邮件将唯一地标识班级的每个对象,那么你没事!

现在,关于Item类的@Id,如果电子邮件唯一标识每个对象,则无需创建新的自动生成的Long作为@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

希望有所帮助!