Grailsコンソールでこのコードを実行すると:
def p = new Post(title: "T");
p.save(flush: true); // or p.save();
Post.count();
GORMは例外をスローしていませんが、データはDBに保存されません。私は何が間違っているのですか?
制約違反がある可能性があります。保存メソッドのパラメーターに_failOnError: true
_を追加します。その後、保存が失敗すると例外が発生します。 (または、saveからの戻り値を確認し、それがfalseの場合はp.errors.allErrors()
を出力することもできます。)
検証と保存は一緒に行われます。あるドメインオブジェクトにバインドされているユーザーが送信したデータを検証する場合、無効な入力が原因で保存が失敗するかどうかを確認するには、保存の戻り値を確認するのが一般的です。無効な入力が原因で失敗することは、例外的な動作ではありません。オブジェクトの内容を保存し、問題が発生した場合に例外をスローする場合は、failOnError
を使用します。
彼らがGORMを設計した理由の詳細については、これを行う必要があります この記事を参照 。
Post
の制約に違反している可能性があるため、オブジェクトは保存されていません。 GORMのデフォルトの動作は、失敗した保存をスローしないことに注意してください。あなたはそれを次のように呼ぶ必要があります
p.save(flush: true, failOnError: true);
または、追加して動作をグローバルに変更します
grails.gorm.failOnError=true
config.groovyに