web-dev-qa-db-fra.com

Classe de domaine Grails, Texte de champ de cordes et longtext

Dans une classe de domaine GRAVES, comment définir la contrainte pour un champ de chaîne afin que son type de colonne MySQL soit du texte ou de la longueur?

Jusqu'à présent, ma meilleure approche est de définir la taille de la contrainte:

myTextField(size:0..65535)

qui résulte en texte

myTextField(size:0..2147483646)

résultats à longtext (2147483646 = 2 ^ 32/2 - 1 - 1)

Y a-t-il un moyen plus propre de spécifier la taille? Fondamentalement, je souhaite la gamme complète de texte ou à longtext sans avoir à corriger un tas de valeurs de taille.

38
Steve Kuo

Vous pouvez déclarer que dans la fermeture de mappage de votre classe de domaine:

static mapping = {
   myTextField type: 'text'
}

(Voir Documentation DSL ORM )

95
Siegfried Puchbauer

l'utilisation de SQLTYPE vous permettrait d'aller pour une contrainte de grain fin.

Class Foo{
    String myTxtAsVarchar
    String myTxtAsText
    String myTxtAsLtext

    static mapping = {
       myTxtAsVarchar  sqlType: 'varchar(255)'
       myTxtAsText     sqlType: 'text'
       myTxtAsLtext    sqlType: 'longText' 
    }
    /*applying constraint on DB end + on Domain model(scaffolding/Validation)*/
    static constraints = {
           myTxtAsVarchar  size: 2..255
           myTxtAsText     size: 2..15000
     }
}

l'utilisation de type SQL a également mis à disposition le type de blob réel (type d'octet lié à TinyBlob par défaut)

plus de mappage détaillé ici: https://grails.github.io/gails-doc/latest/ref/database%20Mapping/column.html

5
Smithfield