Grails多对一暴露id没有延迟加载?

时间:2011-03-31 13:02:50

标签: grails associations lazy-evaluation many-to-one

Grails - 如何在不强制加载整个对象的情况下公开多对一关联属性的id?

class Task {
  User belongsTo
  User createdBy
}
class User {
  ...
}

我是否可以从Task获取用户ID而不会导致延迟加载整个User对象?有没有办法一般地执行此操作,还是会涉及每个类的自定义查询?这实际上涉及DTO对象通过BlazeDS返回 - 我需要的只是id,而不是相关对象。

2 个答案:

答案 0 :(得分:0)

默认情况下,Grails启用了延迟关联,因此您不必担心加载所有链接对象,除非您启用了预先获取。您还可以使用命名查询或休眠标准投影: e.g。

 def taskCriteria = Task.createCriteria()  
 def users = taskCriteria.list{//or get
     projections {
         property "id"
     } 
     user{
         eq("userName", "Joe")
     }   
 }

上面只会为名为Joe的用户提取任务的ID。

答案 1 :(得分:0)

显然你需要使用魔术符号belongsToId和createdById - 见GRAILS-2570