26

私はGrailsのドキュメントのいくつかをざっと読んでいて、Grailsのメソッドについてこのビットを見つけました。read()これを正しく理解していれば、データベースからオブジェクトの「読み取り専用」バージョンをプルできます。これは、明示的なsave()呼び出しでのみ保存されます。read()その場合、変更される予定のないオブジェクトがある場合は常に呼び出しを使用する必要があるように思われます。

しかし、なぜあなたはいつもread()電話を使わないのですか?とにかくオブジェクトを読み取り/書き込み権限に変更するので、オブジェクトsave()を取得するのではなく、単に読み取る方が安全ではないでしょうか。

4

1 に答える 1

22

あなたはおそらく正しいでしょう-それはほとんどの場合同等でしょう。save()ただし、Hibernateはフラッシュ中にダーティチェックを実行し、Grailsは「OpenSession in View」インターセプターを使用するため、各リクエストの最後に常にフラッシュがあるため、呼び出す必要はありません。get()これは、ビューのレンダリング中に一時的なものであることが意図されていたインスタンスに変更を加えた人々を驚かせますが、その後、変更はsave()呼び出しなしでとにかく永続化されます。read()そのシナリオではもっと意味があります。

パフォーマンスの最適化の1つは、 http: //grails.org/doc/latest/ref/Database%20Mapping/dynamicUpdate.htmlを使用して、変更されたフィールドのみをデータベースにプッシュすることです。デフォルトでは、変更されているかどうかに関係なく、すべてのフィールドがプッシュされます。それ以降、更新ごとに新しいSQLを生成する必要はありません。インスタンスHibernateが元のデータを保持しない場合read()、どのフィールドがダーティであるかを知る方法がないため、動的な更新は不可能です。

于 2012-07-09T19:46:34.990 に答える