2

1 対多の関係を持つ 2 つのドメイン オブジェクトがあります。例として:

Class Author{
  static hasMany = [posts: Post]
}
Class Post{
  Author author
}

データベースでは、post テーブルに author_id というフィールドがあります。私のアプリケーションには、投稿に関連付けたい多数の著者 ID があります。これを行うには、最初に各著者のデータベースをクエリし、次に author.addToPosts(post) を呼び出します。しかし、私はすでに作成者オブジェクトの ID を持っているので、post.authorId = authorId を直接設定して関連付けを行い (これはとにかくすべて grails が行うことです)、必要なクエリの数を半分に減らすことができるはずです。

私が書いている実際のアプリケーションでは、これを行うことで、必要なクエリの量が約 70% 削減されます。これはアプリケーションの重大なボトルネックであり、SQL のパフォーマンスが低下するわけにはいきません。これを正確に実行するSQLステートメントを簡単に作成できますが、grailsでauthor_idを直接設定して手動で関連付けを行う方法がわかりません。Rails では、この種の機能がアクティブ レコードに組み込まれています。grails でこれを行う方法はありますか?

4

1 に答える 1

4

Author の 2 次キャッシュを構成し、get() 呼び出しは、ほとんどの場合、データベースからではなく、キャッシュから取得されます (キャッシュ内のインスタンスは、編集時にフラッシュされます)。次に、正味の効果はあなたが探しているものになります - 著者はキャッシュされ、Hibernate はそれを使用して Post の外部キーを設定できます。

于 2010-01-14T06:11:36.953 に答える