Hibernate GORM中一对多属性的属性的条件查询
以下示例类之间存在一对多关系:Hibernate GORM中一对多属性的属性的条件查询,hibernate,grails,gorm,Hibernate,Grails,Gorm,以下示例类之间存在一对多关系: 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] boo
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年在两层楼的房屋上发放贷款的所有活动银行对象。在银行名称查询中,我尝试了:
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)"
我该如何将银行限制在那些拥有两层楼住房贷款的银行?好吧,经过多次尝试,我始终无法使用具有多个关联级别的直接关联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()
我现在还不确定这是为什么——可能是一个bug,也可能只是我不理解的设计行为
希望这至少能让你继续…嗨
经过这么长时间,终于让你得到澄清,
我假设我们在非主键列上使用了诸如“gt,eq”之类的限制,如贷款->年发行,房屋->国民储蓄
只有在这种情况下,才能导航到贷款、房屋等关联路径;我们需要创建别名
哪里不需要别名:
希望这能澄清这件事,并能帮助别人。谢谢!我在单元测试中运行了所有这些,显然在我的测试设置中,createAlias失败了。我在“真实”设置中测试了您的解决方案,它确实有效。有趣的是,使用直接关联的原始方法在“真实”环境中也能正常工作,没有错误。再次感谢。