Comment puis-je fondamentalement effectuer une contrainte unique sur un champ de type de données de chaîne.

class User{
  String username
  String Email

  static hasMany = [roles:Roles]

     static constraints = {
     Email(email:true)
     username(unique:true)

    }
}

Existe-t-il un moyen simple de mettre en œuvre username(unique: true)

Ou dois-je vérifier manuellement la base de données à l'aide de méthodes telles que .findByNameLike ?

Le nom d'utilisateur doit être unique, mais l'unicité doit être insensible à la casse.

5
WaZ 29 mars 2010 à 16:30

2 réponses

Afin d'ajouter une autre solution de la solution "rapide et sale" de @air_blob, avez-vous essayé cela ?

username(validator: { val, obj ->
                      return !User.findByUsernameIlikeAndIdNotEqual(val, obj.id)                      
                    })
2
Guillaume M 11 avril 2013 à 19:33

username(unique:true) est une contrainte valide.

Pour rendre la contrainte insensible à la casse, vous devrez écrire un validateur personnalisé. Voir ce fil de discussion pour plus d'informations.

1
Heinrich Filter 14 janv. 2015 à 16:17
Mate, lorsque je l'implémente, j'obtiens l'erreur suivante : Aucune telle propriété : id pour la classe : com.myCompany.User
 – 
WaZ
29 mars 2010 à 17:46
Le lien renvoie 404 :(
 – 
Rafael
14 janv. 2015 à 16:12
J'ai mis à jour le lien mais je ne sais pas si l'information est toujours applicable
 – 
Heinrich Filter
14 janv. 2015 à 16:18