Grails Criteria multiple hasMany intersection

时间:2015-07-14 05:53:53

标签: grails gorm

我一直在尝试使用多个hasMany对象进行查询,例如:

def product = Product.createCriteria().list {
  createAlias("productAttributeValues", "pav")    

  and {    

    if (session.filters?.filter_instore) {
        and {
          eq("pav.attribute", Attribute.findByCode("instore"))
          eq("pav.valueDe", session.filters?.filter_instore?.toString())
        }
    }

    if (session.filters?.filter_promo) {
      and {
        eq("pav.attribute", Attribute.findByCode("promo"))
        eq("pav.valueDe", "1")
      }
    }
  }    
}

这似乎不起作用,因为我从来没有得到结果集,尽管我有匹配的测试数据。似乎问题是我用相同的对象查询了两次。

一种可能的解决方案是单独查询productAttributeValues,然后与""(" myPavs",pavs)相交 - 但这似乎对我来说效率低下。

有什么想法? 感谢。

1 个答案:

答案 0 :(得分:1)

我会重新构建你的查询:

def products = Product.withCriteria{
  productAttributeValues{    
    or{
      if (session.filters?.filter_instore) {
        and {
          eq("attribute", Attribute.findByCode("instore"))
          eq("valueDe", session.filters?.filter_instore?.toString())
        }
      }

      if (session.filters?.filter_promo) {
        and {
          eq("attribute", Attribute.findByCode("promo"))
          eq("valueDe", "1")
       }
      }
    }
  }    
}