Как применить уникальное значение поля в Java App Engine - PullRequest
7 голосов
/ 14 октября 2009

Я пытаюсь выяснить, как обеспечить уникальность в полях, отличных от уникального идентификатора.

Пример:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements IsSerializable {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String name; 

    @Persistent
    private String email; // <= I want this to be unique as well
}

В приведенном выше примере, как я могу обеспечить уникальность значения электронной почты в базе данных?

Daniel

Ответы [ 3 ]

11 голосов
/ 14 октября 2009

В настоящее время нет встроенного способа использования хранилища данных движка приложения. См., Например, этот билет на датанкулеус . (Обратите внимание, что сама JDO имеет аннотацию @unique.)

Одним из способов «подделки» было бы создание другого вида / класса, называемого «Электронная почта», с самим адресом электронной почты в качестве ключа и ключом пользователя в качестве свойства. Поскольку электронное письмо теперь является ключом, оно будет вынуждено быть уникальным. Просто убедитесь, что ваши объекты электронной почты являются объектами верхнего уровня, а не дочерними элементами их ассоциированного пользователя. Вам также нужно будет внимательно следить за использованием транзакций, чтобы избежать пропуска дубликатов через трещины, если два пользователя пытаются использовать один и тот же адрес электронной почты в одно и то же точное время.

6 голосов
/ 25 апреля 2012

Я написал класс, который позаботится обо всех функциональных возможностях добавления уникальных полей в объекты App Engine. Пожалуйста, не стесняйтесь использовать его.

Подключите этот класс к своему проекту и просто добавьте методы get и update и предоставьте Имя сущности, Имя поля и уникальное значение поля

Исходный код доступен здесь:

http://code.google.com/p/appengine-uniquefields/

1 голос
/ 07 апреля 2010

Эта функция пока не поддерживается. Если вы решили написать слой DAO в своем проекте (неплохая идея), вы можете выполнить запрос, который проверит любые ограничения внутри MyObjectDAO.addMyObject (o), которые вызовут исключение MySuperDuplicateValueException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...