Объяснить и отправить по электронной почте как @Id - PullRequest
1 голос
/ 29 сентября 2011

Я не уверен, правильно ли я использую @Id для объективизации. Прямо сейчас я использую адрес электронной почты в качестве поля @Id. Поле электронной почты будет установлено только на стороне сервера (OAuthService.getCurrentUser.getEmail)

Первый вопрос: это хорошая идея?

Если я создаю, например, класс Item, у которого в качестве родителя используется RegistrationTO, имеет ли смысл использовать адрес электронной почты в качестве поля @Id в моем классе Item, или если класс Item имеет свой собственный, автоматически сгенерированный , id и Key parent указать отношение?

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

Заранее спасибо!

1 Ответ

1 голос
/ 27 октября 2011

Что касается вашего вопроса, если использование электронной почты как @Id правильно или нет, так как электронная почта будет однозначно идентифицировать каждый объект класса, то у вас все хорошо!

Теперь, что касается @Id вашего класса Item, если электронная почта однозначно идентифицирует каждый объект, то нет необходимости создавать новый автоматически сгенерированный 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

Надеюсь, это поможет!

...