2009-10-13 37 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 
} 

在上面的例子,如何可以執行跨數據庫的電子郵件值的唯一?

丹尼爾

回答

11

目前還沒有在使用App Engine數據存儲的方式建造。例如,請參見this datanculeus ticket。 (請注意,JDO本身具有@unique註釋。)

「假」的一種方法是創建另一種稱爲Email的類/電子郵件,並將電子郵件本身作爲關鍵字,並將用戶密鑰作爲屬性。由於電子郵件現在是一個關鍵,它將被迫是唯一的。只要確保您的電子郵件實體是頂級實體,而不是其關聯用戶的子女。您還必須密切注意您對交易的使用情況,以確保如果兩名用戶在同一時間嘗試使用同一封電子郵件,則不會讓重複郵件穿過裂縫。

1

此功能尚未支持。如果你決定在你的項目中編寫一個DAO層(不是一個壞主意),你可以做一個查詢,測試MyObjectDAO.addMyObject(o)中你想要的任何限制,這將引發一個MySuperDuplicateValueException異常。

6

我寫了一個類,負責爲App Engine實體添加唯一字段的所有功能。請隨時使用它。

插件這個類在你的項目,只是添加獲取和更新方法,並提供實體名稱,字段名稱和唯一的字段值

的源代碼可以在這裏找到:

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

+0

這個工作很好地滿足我的需求。很聰明。 – Patrick 2012-05-17 12:17:12

+0

我很高興它幫助:) – 2012-05-17 15:25:23

+0

不錯的方法,我已經開始做類似於Peter Recore上面描述的東西了,但是這樣也能解決我的問題,並且代碼少得多。 – 2013-03-31 10:06:00

相關問題