我在以下示例类之间有一对多的关系:
Class Home {
static hasMany = [loans: Loan]
int numStories
}
Class Loan {
static belongsTo = [Bank]
Home home
int yearIssued
}
Class Bank {
SortedSet loans
static hasMany = [loans: Loan]
boolean active
}
我正在尝试编写一个命名查询,该查询获取2007年在2层故事中发布的贷款的所有活动Bank对象。在银行namedQueries我试过:
static namedQueries = {
myNamedQuery { yearIssued, numStories ->
eq 'active', true
loans {
gt 'yearIssued', yearIssued
home {
eq 'numStories', numStories
}
}
}
}
如果我删除上面的“home {eq ...}”部分,查询工作正常,它不会限制为2个故事。当执行上面的操作时,我得到一个groovy.lang.MissingMethodException错误,如:
No signature of method: package.stuff.Home.call() is applicable for argument types
(package.stuff.Bank$__clinit__closure3_closure10_closure20_closure21)
values: [package.stuff.Bank$__clinit__closure3_closure10_closure20_closure21@746231ed];
Possible solutions: wait(), last(), save(), any(), getAll(), wait(long)"
我如何限制银行返回那些有2层房屋贷款的银行?
答案 0 :(得分:1)
好吧,经过多次尝试后,我无法使用直接关联dsl与多个关联级别进行工作。我能够使用别名让它工作:
static namedQueries = {
myNamedQuery { yearIssued, numStories ->
eq 'active', true
createAlias 'loans','l'
createAlias 'l.home','h'
gt('l.yearIssued', yearIssued)
eq('h.numStories',numStories)
}
}
然后使用
调用它def bankInstanceList = Bank.myNamedQuery(2007,2).list()
我现在不确定这是为什么 - 可能是一个错误或只是我不理解的设计行为。
希望这至少可以帮助你......
答案 1 :(得分:0)
嗨Kelly,
经过这么长时间的努力,终于得到了澄清, 我假设我们在非主键列上使用像“gt,eq”这样的限制,例如贷款 - > yearIssued,home - > numStories。
只有在这种情况下,才能导航到贷款,家庭等关联路径;我们需要创建别名。
我们在哪里不需要别名:
希望这能澄清事情,并可能帮助某人。