2009-10-13 2 views
7

Я пытаюсь выяснить, как применять уникальность в полях, отличных от уникального идентификатора.Как обеспечить уникальное значение поля в java Google App Engine

Пример:

@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

ответ

11

Там в настоящее время не построено в пути с помощью хранилища приложения двигателя. См. Например, this datanculeus ticket. (Обратите внимание, что сам JDO имеет аннотацию @unique.)

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

1

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

6

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

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

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

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

+0

Это работало хорошо для моих нужд. довольно умный. – Patrick

+0

Я рад, что это помогло :) –

+0

Приятный подход, я начал делать что-то похожее на то, что описано выше, описанное Питером Релоре, но это также решит мои проблемы так же хорошо, и с гораздо меньшим количеством кода. –

Смежные вопросы