2

2 つのデータベース クエリを作成するクエリがあります。私は GORM を初めて使用し、基準や where 句などを使用して 1 つのクエリに最適化する方法がわかりません。私もspringsecurityを使用しており、ログインセキュリティ用の User クラスを持っています。User オブジェクトを持つ Profile クラスがあります。

class Profile {
   User user
}

私のコントローラーでは、セッションはユーザーIDを保存します。プロファイルをロードして更新する場合、現在のコードは次のとおりです。

def user = User.get(springSecurityService.principal.id) // 1st db query
def domainObject = Profile.findByUser(user) // 2nd db query

試行錯誤しながらいくつかのクエリのバリエーションを試しましたが、エラーを生成しないものを見つけることができないようです。これは些細なことのように思えます。疑似クエリは、「このユーザー ID を持つ profile.user のプロファイルを取得してください」になります。

4

2 に答える 2

9

メソッドを使用してload、最初のデータベース クエリを回避できます。

def user = User.load(springSecurityService.principal.id)
def domainObject = Profile.findByUser(user)

これは、load以外のプロパティにアクセスするまでデータベース ルックアップをトリガーしないため機能しますが、それは外部キーでidあるため、 に必要なのはそれだけです。findByUser

于 2013-09-09T16:17:19.090 に答える