gpt4 book ai didi

hibernate - Grails获取:“join”困惑

转载 作者:行者123 更新时间:2023-12-02 14:07:18 25 4
gpt4 key购买 nike

最近,我从Grails 1.3.9升级到了2.2.4,并注意到某些与fetch:“join”映射不一致的行为。我创建了一个简单的grails项目来演示该问题。

报告域:

class Report {

String name

static hasMany = [variables:Variable]

static mapping = {
variables cascade: "all-delete-orphan", fetch: "join"
}
}

可变域:
class Variable {

String name

static belongsTo = [parent:Report]
}

在2.2.4的Grails控制台中运行以下脚本:
if(!Report.findByName("Test")){ 
Report report = new Report(name:"Test")
Variable var1 = new Variable(name:"var")
Variable var2 = new Variable(name:"var2")
report.addToVariables(var1)
report.addToVariables(var2)
report.save(flush:true)
}

def report2 = Report.findByName("Test")
println report2.variables

def report3 = Report.findAllByName("Test")
println report3.get(0).variables

def report4 = Report.findByName("Test",[fetch:[variables:"eager"]])
println report4.variables

提供以下输出:

在脚本的第一次运行中:
[findbytest.Variable : 1, findbytest.Variable : 2]
[findbytest.Variable : 1, findbytest.Variable : 2]
[findbytest.Variable : 1, findbytest.Variable : 2]

在脚本的第二次和所有后续运行中:
[findbytest.Variable : 1]
[findbytest.Variable : 1]
[findbytest.Variable : 1]

每次删除fetch:“join”并重新运行脚本都会产生以下输出:
[findbytest.Variable : 1, findbytest.Variable : 2]
[findbytest.Variable : 1, findbytest.Variable : 2]
[findbytest.Variable : 1, findbytest.Variable : 2]

在有和没有fetch:“join”的情况下,在1.3.9上运行相同的脚本每次都会产生以下输出:
[findbytest.Variable : 1, findbytest.Variable : 2]
[findbytest.Variable : 1, findbytest.Variable : 2]
[findbytest.Variable : 1, findbytest.Variable : 2]

任何帮助或指示,不胜感激。
谢谢!

最佳答案

您的问题可能与以下错误有关:https://jira.grails.org/browse/GRAILS-9829

这实际上意味着,对于任何基于标准的查询,您都不能使用fetch-joins。

您将需要使用直接HQL进行此类优化查询。

如果您的问题源于上述错误,请在错误报告中评论,也许它的重要性已增长到足以采取行动(我认为这是一个很大的问题,甚至可以触发某人的Hibernate3补丁版本)。

关于hibernate - Grails获取:“join”困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112769/

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