2009-10-13 14 views
7

Benzersiz kimlikten farklı alanlarda benzersizliği nasıl uygulayacağınızı bulmaya çalışıyorum.Java'da benzersiz alan değerini nasıl uygularsınız? Google App Engine

Örnek:

Yukarıdaki örnekte
@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 
} 

, nasıl veritabanı genelinde e-posta değeri benzersizliğini zorlayabilir?

Daniel Şu anda uygulama motoru datastore kullanarak şekilde inşa yoktur

cevap

11

. Örneğin, this datanculeus ticket'a bakın. (JDO'nun kendisi bir @ unique ek açıklamasına sahiptir.)

'Sahte' olmanın bir yolu, e-posta ile bir e-posta ile e-posta olarak adlandırılan başka bir tür/sınıf oluşturmak ve bir özellik olarak Kullanıcının anahtarıdır. E-posta artık bir anahtar olduğundan, benzersiz olmaya zorlanacak. E-posta varlıklarınızın, ilişkili Kullanıcıların çocukları değil, üst düzey varlıklar olduğundan emin olmanız yeterlidir. Aynı anda iki kullanıcının aynı e-postayı aynı anda kullanmayı denemesi durumunda, çatlaklardan çift kayma yapmanıza izin vermediğinizden emin olmak için işlem kullanımınıza yakından dikkat etmeniz gerekir.

1

Bu özellik henüz desteklenmemektedir. Projenizde bir DAO Katmanı yazmaya karar verdiyseniz (Kötü bir fikir değil), MySuperDuplicateValueException öğesini atacak olan MyObjectDAO.addMyObject (o) içinde istediğiniz sınırları test edecek bir sorgu yapabilirsiniz.

6

App Engine Varlıklarına Benzersiz Alanların eklenmesiyle ilgili tüm işlevselliği dikkate alan bir sınıf yazdım. Lütfen onu kullanmaktan çekinmeyin.

Tak Bu sınıf projenizde ve basitçe

Kaynak kodu burada mevcuttur Varlık Adı, Alan Adı ve benzersiz alan değeri elde ve güncelleme yöntemleri ekleyip sağlar:

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

+0

Bu çalıştı ihtiyaçlarım için güzel. Oldukça zekice. – Patrick

+0

Yardım ettiğine sevindim :) –

+0

Güzel yaklaşım, yukarıda anlatılan Peter Recore'ya benzer bir şey yapmaya başladım, fakat bu benim de problemlerimi çok daha az kodla çözecek. –