1

ドメイン クラスでは、「割り当てられた」ID ジェネレーターを使用しています。

static mapping = {
    id(generator: 'assigned')
}

エンティティを保存する前に、ID が設定されていることを確認したいと思います。

def beforeSave() {
    if (!id) {
        id = DomainUtil.newId();
    }
}

残念ながら、これは機能しません:

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): was.Product

「beforeSave」フックは、ID のチェックが行われた後に呼び出されるようです。これを回避する方法はありますか? Grails 2.1.1 を使用しています。

編集:

これは機能しているように見えますが、かなりハックです: プロパティの宣言で、次のように追加しました:

String id = DomainUtil.newId(); 

これにより、ID が「デフォルト」で初期化されます。これは、 を呼び出す前に変更できますsave()

4

2 に答える 2

1

試すことができbeforeValidateます。それはおそらくあなたが探しているものに最も近いものです。ただし、特定のケースで機能するかどうかはわかりません。save()を呼び出すため、挿入または更新時に実行されますvalidate()

于 2012-12-06T01:44:50.447 に答える
1

beforeSaveサポートされている GORM イベントではありません。を使用しますbeforeInsert

関連ドキュメントはこちら

于 2012-12-05T18:50:46.833 に答える