基于动态关联的GORM hibernate条件查询
我有一个GORM域对象,它通过两个不同的列与另一个对象关联。我试图通过一对嵌套联接获取一些数据。我决定将查询一分为二,而不是加入两次并使返回的行数以指数方式增加 是否有一种方法可以动态指示您要查询的列?换句话说,有没有可能把这段代码基于动态关联的GORM hibernate条件查询,hibernate,grails,gorm,Hibernate,Grails,Gorm,我有一个GORM域对象,它通过两个不同的列与另一个对象关联。我试图通过一对嵌套联接获取一些数据。我决定将查询一分为二,而不是加入两次并使返回的行数以指数方式增加 是否有一种方法可以动态指示您要查询的列?换句话说,有没有可能把这段代码 Set<Template> templates = new HashSet<Template>() templates.addAll(Template.createCriteria().list { eq 'isActive',true
Set<Template> templates = new HashSet<Template>()
templates.addAll(Template.createCriteria().list {
eq 'isActive',true
eq 'allowCustomerRequest',true
buyer {
companyUsers {
eq 'userId',userId
}
}
})
templates.addAll(Template.createCriteria().list {
eq 'isActive',true
eq 'allowCustomerRequest',true
seller {
companyUsers {
eq 'userId',userId
}
}
})
Set templates=newhashset()
templates.addAll(Template.createCriteria().list{
eq‘isActive’,正确
等式“allowCustomerRequest”,为真
买主{
公司用户{
eq“userId”,userId
}
}
})
templates.addAll(Template.createCriteria().list{
eq‘isActive’,正确
等式“allowCustomerRequest”,为真
卖方{
公司用户{
eq“userId”,userId
}
}
})
把它缩短成这样
Set<Template> templates = new HashSet<Template>()
['buyer','seller'].each{ who ->
templates.addAll(Template.createCriteria().list {
eq 'isActive',true
eq 'allowCustomerRequest',true
who {
companyUsers {
eq 'userId',userId
}
}
})
}
Set templates=newhashset()
[‘买方’、‘卖方’]各{who->
templates.addAll(Template.createCriteria().list{
eq‘isActive’,正确
等式“allowCustomerRequest”,为真
谁{
公司用户{
eq“userId”,userId
}
}
})
}
编辑
正如@dmahapatro所指出的,可以在一个查询中实现这一点,但是我认为这样做会增加相当多的行数。下面是一个执行多重联接的示例
Set<Template> templates = new HashSet<Template>()
templates.addAll(Template.createCriteria().listDistinct {
eq 'isActive',true
eq 'allowCustomerRequest',true
or{
buyer {
companyUsers {
eq 'userId',userId
}
}
seller {
companyUsers {
eq 'userId',userId
}
}
}
})
Set templates=newhashset()
templates.addAll(Template.createCriteria().listDistinct{
eq‘isActive’,正确
等式“allowCustomerRequest”,为真
或{
买主{
公司用户{
eq“userId”,userId
}
}
卖方{
公司用户{
eq“userId”,userId
}
}
}
})
在单个条件查询中对买方
和卖方
进行左联接应该可以解决问题,对吧?@dmahapatro是的,我可以在单个条件中进行左联接,但它会成倍地增加返回的行数。可以通过listDistinct筛选出重复项。但我受到了另一位开发人员的批评,他说他的VPN连接花费了太长时间P