gpt4 book ai didi

hibernate - 渴望在 grails 中获取整个对象树

转载 作者:行者123 更新时间:2023-12-01 02:32:42 26 4
gpt4 key购买 nike

所以我在域中有一些对象,它们彼此之间存在 hasMany 关系,如下所示

Class Car {
String name
SortedSet tires = [] as SortedSet
static hasMany = [tires: Tire]
}

Class Tire {
String type
SortedSet screws = [] as SortedSet
static hasMany = [screws: Screw]
}

Class Screws {
String type
}

现在,我想让我可以通过 findByName 获得的某种汽车的整个对象树脱机。我知道我们可以在 finder 上进行 fetch 热切,但这只会下降一级。在示例中,我有 2 个或更多级别。

所以我的问题是这个。是否有一个优雅的解决方案来急切获取整个对象树,然后在不使用 grails/Hibernate 触发另一个查询来获取详细信息的情况下使用它。

我尝试了以下似乎有类似结果但并不优雅的方法。

withCriteria 解决方案
def cars = Car.withCriteria {
tires {
screws {
join 'screws'
}
}

我也尝试将整个树转换为 JSON 并重新解析它,但这似乎是一种矫枉过正。我想基本上我试图让整个对象树脱机。如果这可以轻松完成或完全可以完成,您有什么想法吗?

TIA

最佳答案

使用映射闭包:

Class Car {
String name
SortedSet tires = [] as SortedSet
static hasMany = [tires: Tire]
static mapping = {
tires lazy: false
}
}

Class Tire {
String type
SortedSet screws = [] as SortedSet
static hasMany = [screws: Screw]
static mapping = {
screws lazy: false
}
}

Class Screws {
String type
}

也许你应该像规则一样采取异常(exception),我的意思是,你可以将你的域类配置为 lazy: false并使用 fetch lazy 调用您的查找器:
def cars = Car.findAllByType(type: "Alfa", [fetch: [tires: 'lazy']])

我不知道这是否是一个有效的选择,但你可以尝试一下。

关于hibernate - 渴望在 grails 中获取整个对象树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com