好的,我想知道实现我的场景的最佳方法是什么。
我的对象如下:
ProjectCategory 有许多项目。项目有一个 ProjectStatus。 ProjectStatus 有一个名为 name 的属性,名称可以是“Closed”或“Open”等...
我试图在页面上显示所有类别以及类别名称旁边该类别的已打开项目数。
我将如何去做。我看到的问题是(使用 grails gorm)默认情况下你不能做类似的事情
category.findAll{ it.status.name == "Opened" }.size()
因为对象没有加载那么深。现在如果我强制他们加载,现在对于所有类别,我可能会加载一堆项目只是为了获得状态。您拥有的项目数量越多,系统的性能是否会受到巨大影响?
每当项目状态发生变化时,在类别中创建一个计数器并更新它的想法让我感到畏缩。
我一定只是被剥夺了 sleep ,因为我看不出这样做的正确方法是什么。如果我首先提到的 .findAll 方法是要走的路,我真的需要担心性能吗?我将如何实现呢?
提前感谢您的所有帮助。
最佳答案
我会使用 HQL。假设项目属于一个 ProjectCategory,您可以将这样的内容添加到您的 ProjectCategory
类(class):
class ProjectCategory {
// Fields/Methods
def getOpenedProjectsCount() {
ProjectCategory.executeQuery("SELECT count(*) FROM Projects p WHERE p.projectCategory = :projectCategory AND p.projectStatus.name = 'Opened'", [projectCategory: this])
}
}
那么当你有一个
ProjectCategory
您可以使用 openedProjectsCount
的实例属性(property):def projectCategory = ProjectCategory.get(123)
projectCategory.openedProjectsCount
关于grails - Lazy Eager 加载 Grails GORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23941140/