2

私は Grails を初めて使用し、Grails 2.1 と MySQL 5.5 バックエンドを使用してサンプル プロジェクトを構築して学習しています。

JodaTime 1.4 プラグインをインストールしてから実行しましたgrails install-joda-time-templates

しかし、Domain Class フィールドを org.joda.time.DateTime 型として宣言すると、新しいエントリを保存しようとするとエラーが発生しました。

問題を切り分けるために、単純なドメイン クラスを作成しました。

import org.joda.time.DateTime

class Project
{
    String name
    DateTime startDate

    static constraints = {
        name(blank: false, maxSize: 50)
        startDate(validator: {return (it > new DateTime())})
    }
}

コントローラーは、ドメイン クラスを使用するように scaffold を設定するだけです。

私の DataSource.groovy はdbCreate = "create-drop"、テーブルが Grails によって作成されるようにしているため、 を指定しています。

保存しようとすると、次のエラーが表示されます。

Class:com.mysql.jdbc.MysqlDataTruncation
Message:Data truncation: Data too long for column 'start_date' at row 1

Grails が作成した MySQL データベースの project.start_date カラムを見ると、型は TINYBLOB です。

JodaTime の DateTime フィールドのデータを格納するには、TINYBLOB では不十分かもしれないと考えています。

Grailsに適切なタイプを作成させる方法を知っている人はいますか?

どうもありがとうございました。

4

2 に答える 2

5

Config.groovy で:

grails.gorm.default.mapping = {
    "user-type" type: PersistentDateTime, class: DateTime
    "user-type" type: PersistentLocalDate, class: LocalDate
}

そしてあなたのマッピングクロージャー:

static mapping = {
    startDate type: PersistentDateTime
}

詳細については、この投稿をご覧ください。役立つかどうかを確認してください。

于 2012-08-16T13:28:25.253 に答える
0

それを機能させるために私がしたこと(Grails 2.1):

1)buildConfigに追加します。

compile "org.jadira.usertype:usertype.jodatime:1.9"

2)依存関係を更新します

3)次のコマンドを実行して、サポートされているユーザータイプを追加します。

grails install-joda-time-gorm-mappings

4)最後にドメインクラスに:

import org.jadira.usertype.dateandtime.joda.*

static mapping = {
 column_name type: PersistentDateTime
}

ドキュメントはここで見つかりました:永続性

于 2012-08-26T13:19:12.850 に答える