Pertanyaan Kelas domain Grails, String bidang TEXT dan LONGTEXT


Di kelas domain Grails, bagaimana cara menetapkan kendala untuk bidang String sehingga jenis kolom MySQL-nya TEXT atau LONGTEXT?

Sejauh ini pendekatan terbaik saya adalah mengatur ukuran kendala:

myTextField(size:0..65535)

yang menghasilkan TEXT

myTextField(size:0..2147483646)

hasil dalam LONGTEXT (2147483646 = 2 ^ 32/2 - 1 - 1)

Apakah ada cara yang lebih bersih untuk menentukan ukurannya? Pada dasarnya saya ingin berbagai macam TEXT atau LONGTEXT tanpa harus hardcode sekelompok nilai ukuran.


36
2018-01-11 20:27


asal


Jawaban:


Anda dapat menyatakan bahwa dalam penutupan pemetaan kelas Domain Anda:

static mapping = {
   myTextField type: 'text'
}

(Lihat Dokumentasi DSL ORM)


90
2018-01-11 21:42



menggunakan sqlType akan memungkinkan Anda untuk mencari batasan berbutir yang lebih baik

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
     }
}

menggunakan tipe SQL juga menyediakan tipe Blob aktual (tipe byte yang ditautkan ke tinyBlob secara default)

pemetaan lebih rinci di sini: https://grails.github.io/grails-doc/latest/ref/Database%20Mapping/column.html 


5
2018-03-26 14:26