Estoy tratando de tener un db consistente donde el nombre de usuario y el correo electrónico sean únicos.MongoDB Morphia - Unique
http://www.mongodb.org/display/DOCS/Indexes#Indexes-unique%3Atrue
http://code.google.com/p/morphia/wiki/EntityAnnotation
Mi clase de usuario tiene el siguiente aspecto:
public class User {
@Indexed(unique = true)
@Required
@MinLength(4)
public String username;
@Indexed(unique = true)
@Required
@Email
public String email;
@Required
@MinLength(6)
public String password;
@Valid
public Profile profile;
public User() {
...
he utilizado la @Indexed (singular = true) anotación pero no funciona. Todavía hay duplicados en mi db.
¿Alguna idea de cómo puedo solucionar esto?
Editar:
He leído sobre ensureIndexes pero esto parece un enfoque equivocado, no quiero cargar datos duplicados, sólo para ver que es realmente un duplicado.
Quiero bloquearlo de inmediato.
algo como
try{
ds.save(user);
}
catch(UniqueException e){
...
}
hm, no lo entiendo. Claro que puedo verificarlo, pero ¿qué ocurre si dos usuarios se registran con el mismo nombre de usuario al mismo tiempo? Necesitaría algo que sea atómico. –
Las bases de datos tienen su propia compilación en sistemas de bloqueo (cerraduras de lectura, escritura, etc.), por lo que creo que si existen restricciones únicas a nivel de base de datos, ¿no sería posible guardar datos duplicados al mismo tiempo? –
Quizás estoy equivocado, pero pensé que querías decir algo como esto. 'if (user.not_in_db) ds.save (user);' Y si no tengo ninguna restricción en el nivel db, habrá datos duplicados. –