如何优化此GORM查询

spo*_*k99 2 grails hibernate grails-orm

我有一个查询,它进行2次数据库查询.我是GORM的新手,不知道如何使用条件或where子句或其他内容将其优化为1个查询.我也使用springsecurity并且具有用于登录安全性的User类.我有一个带有User对象的Profile类:

class Profile {
   User user
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,会话存储用户ID.当我想加载配置文件来更新它时,我的代码目前是:

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

我通过试验和错误尝试了一些查询变体,但似乎找不到不会产生错误的查询.这似乎是微不足道的.伪查询将"获取具有此用户ID的profile.user的配置文件".

Bur*_*ith 9

您可以使用该load方法来避免第一个数据库查询:

def user = User.load(springSecurityService.principal.id)
def domainObject = Profile.findByUser(user)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为load在访问除了之外的任何属性之前不会触发数据库查找id,但这就是findByUser因为它是外键所需要的所有属性.