web-dev-qa-db-ja.com

Grailsドメインクラス、文字列フィールドTEXTおよびLONGTEXT

Grailsドメインクラスで、MySQLカラムタイプがTEXTまたはLONG​​TEXTになるようにStringフィールドの制約を設定するにはどうすればよいですか?

これまでのところ、私の最善のアプローチは、制約のサイズを設定することです。

myTextField(size:0..65535)

結果はTEXTになります

myTextField(size:0..2147483646)

結果はLONG​​TEXT(2147483646 = 2 ^ 32/2-1-1)

サイズを指定するためのより明確な方法はありますか?基本的に、一連のサイズ値をハードコーディングすることなく、TEXTまたはLONG​​TEXTの全範囲が必要です。

38
Steve Kuo

これは、ドメインクラスのマッピングクロージャで宣言できます。

static mapping = {
   myTextField type: 'text'
}

ORM DSLドキュメント を参照)

95

sqlTypeを使用すると、より詳細な制約に進むことができます

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

sQL型を使用すると、実際のBlob型も利用可能になります(デフォルトでtinyBlobにリンクされたバイト型)

ここで詳細なマッピング: https://grails.github.io/grails-doc/latest/ref/Database%20Mapping/column.html

5
Smithfield