通过动态关联GORM hibernate条件查询

时间:2013-12-27 22:25:07

标签: hibernate grails gorm

我有一个GORM域对象,它通过两个不同的列与另一个对象建立关联。我试图通过几个嵌套连接获取一些数据。我没有连接两次并且返回的行数呈指数增长,而是决定将查询分成两部分。

有没有办法动态指出要查询的列?换句话说,是否可以采用这段代码......

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<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
      }
    }
  })
}

修改 如@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
      }
    }
  }
})

0 个答案:

没有答案