2011-10-12 20 views
7

GORM .getを使用してオブジェクトoを取得し、いくつかのフィールドを修正し、o.validate()を呼び出してHibernateがオブジェクトをDBに保存することなくエラーを見つける方法。それ自身で破棄しても保存を妨げることはありません。どちらもgrailsドメインオブジェクトを保存せずに変更して検証する

   clazz.withTransaction { status -> 
        row.validate(flush:false) 
        row.discard() 
        status.setRollbackOnly() 
       } 

Thisポストは、コマンドオブジェクトを使用することをお勧めしませんが、このコードは、多くの異なるドメインオブジェクトに適用されます。 Hibernateに保存しない命令を与えるためには、単純な方法(いくつかのパラメータを渡して検証します)が必要です。毎回新しいインスタンスを作成する必要がありますか?

答えて

11

get()の代わりにread()を使用してオブジェクトを取得すると、フラッシュ中に自動的に保存されません(トランザクションやWebリクエストの終了時など)。あなたがsave()と呼ぶことができるので、それは本当に読み取り専用ではなく、それは持続します - それは単に汚れたときに自動的に保存されません。

+0

o.save()を明示的に呼び出してオブジェクトをフラッシュキューに入れる必要はありませんか? –

+2

いいえ、変更されたセッションに接続されているインスタンスはすべてフラッシュされます。 'save()'を呼び出す必要があるのは、新しいインスタンスだけです。 –

+0

ありがとうございました – cardenizen

関連する問題