Grails 多对一公开 id 而无需延迟加载?

发布于 2024-10-27 20:33:04 字数 266 浏览 4 评论 0原文

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

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

我可以从任务中获取用户 ID,而不会导致整个用户对象的延迟加载吗?有没有一种方法可以做到这一点,或者它会涉及每个类的自定义查询?这实际上涉及通过 BlazeDS 返回的 DTO 对象 - 我需要的只是 id,而不一定是关联的对象。

Grails - How can I expose the id of a many-to-one association property without forcing a load of the entire object?

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

Can I get get the User ids from Task without causing lazy loading of the entire User objects? Is there a way to do this in general, or will it involve a custom query for each class? This actually involves DTO objects to return via BlazeDS - all I need are the ids, not the associated objects necessarily.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫卆 2024-11-03 20:33:04

默认情况下,Grails 启用了惰性关联,因此您不必担心所有链接对象的加载,除非您启用急切获取。此外,您可以使用命名查询或休眠标准投影:
例如,

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

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

Grails by default has lazy association enabled so you don't have to worry about the loading of all chained objects unless you enable eager fetching. further more you could use named queries or hibernate criteria projections:
e.g.

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

the above will pull only the id of a task for a user called Joe.

没有心的人 2024-11-03 20:33:04

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

Apparently you need to use the magic notation belongsToId and createdById - see GRAILS-2570

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文