web-dev-qa-db-ja.com

GORMがオブジェクトを保存しないのはなぜですか?

Grailsコンソールでこのコードを実行すると:

def p = new Post(title: "T");
p.save(flush: true); // or p.save();

Post.count();

GORMは例外をスローしていませんが、データはDBに保存されません。私は何が間違っているのですか?

18
K Everest

制約違反がある可能性があります。保存メソッドのパラメーターに_failOnError: true_を追加します。その後、保存が失敗すると例外が発生します。 (または、saveからの戻り値を確認し、それがfalseの場合はp.errors.allErrors()を出力することもできます。)

検証と保存は一緒に行われます。あるドメインオブジェクトにバインドされているユーザーが送信したデータを検証する場合、無効な入力が原因で保存が失敗するかどうかを確認するには、保存の戻り値を確認するのが一般的です。無効な入力が原因で失敗することは、例外的な動作ではありません。オブジェクトの内容を保存し、問題が発生した場合に例外をスローする場合は、failOnErrorを使用します。

彼らがGORMを設計した理由の詳細については、これを行う必要があります この記事を参照

36
Nathan Hughes

Postの制約に違反している可能性があるため、オブジェクトは保存されていません。 GORMのデフォルトの動作は、失敗した保存をスローしないことに注意してください。あなたはそれを次のように呼ぶ必要があります

p.save(flush: true, failOnError: true);

または、追加して動作をグローバルに変更します

grails.gorm.failOnError=true

config.groovyに

11
Stephen Swensen