【问题标题】:Problem with GORM Lazy Loaded ListGORM 延迟加载列表的问题
【发布时间】:2011-05-04 13:09:48
【问题描述】:

我目前遇到了 grails 问题。我有一个包含列表(hasMany = [users : User])的类(Item),然后User是一个包含3个子类(SubUser1,SubUser2)的类。

问题是当我触摸包含用户列表的集合时,其中包含的对象都是 User 类型(而不是子类,应该是正确的)。

有了这个问题,无法知道集合中的用户属于哪一种类型。

您以前遇到过这个问题吗?你知道如何解决这个问题吗?

谢谢, 尼古拉斯

以下是相关代码:

/*** Domain Class ***/
class Item {
   List<User> users = []
   static hasMany = [users : User]
}

class User {
   String username
}

class User1 {
   //Some other properties
} 

/*** On the view ***/
item.users
     --> Returns a list of User_$javassist$ and 
     not of type User1 as it should be

【问题讨论】:

  • 能否分享一下通过Item类访问用户的代码以及如何确定他们是用户对象而不是子类。
  • 目前,要查看列表中对象的真实类,我只是遍历集合并再次加载每个对象。

标签: hibernate grails grails-orm


【解决方案1】:

我有一个在 grails 中使用像这样的多态性的项目。而且我没有这个问题。我有一个名为Media 的超类和BookMovie 等子类

如果我做 Media.all.each { it instanceof Movie ? println 'is movie' : 'is not movie' } 会给我预期的输出,其中有些是电影,有些不是电影。

编辑

试试这个结构

class Item {
   static hasMany = [users : User]
   static mapping = {
       tablePerHierarchy false
   }

}

class User {
   String username
}

class User1 extends User {
   //Some other properties
} 

【讨论】:

  • 感谢您的快速回答。您知道您当前使用的是哪个版本吗? (我使用的是 1.3.6)
  • 另外,我刚刚检查过,User.all() 工作正常。当我尝试加载项目类的用户列表时,问题似乎出现了。
  • 也许你需要急切的抓取?
  • 我已经试过了,没有任何效果。我最终只是在使用它之前将对象加载到集合中。但这只是一个肮脏的 Hack,可能会损害应用程序的性能。
  • 也许如果我能看到你的班级结构,我可能会进一步帮助你。
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 2012-08-07
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多