2015-02-12 135 views
-3

我有这样一个域名:Groovy的名称查询

ZZPartAndTeam 
    String parts 
    String team  

零件可能会有很多的球队。

For ex: part:part1 team:10 
     part:part1 team:20 
     part:part2 team:30 

如何在域中查询获得所有具有多团队的零件?

result:part:part1 team:10 
     part:part1 team:20 

谢谢。

+2

到目前为止您尝试过什么?什么是“多个团队”?你的“域”有'字符串部分',稍后你会谈论'部分:'。这个例子不完全难以理解 – cfrick 2015-02-12 09:23:54

回答

0

Hibernate条件不支持HAVING子句。解决方法是使用DetachedCriteria。

  import org.hibernate.criterion.DetachedCriteria as HDetachedCriteria 

      query: { builder, params -> 

       // This query counts the number of teams per part 
       HDetachedCriteria innerQry = HDetachedCriteria.forClass(ZZPartAndTeam.class) 
       innerQry.setProjection(Projections.projectionList() 
        .add(Projections.count('team').as('teamCount')) 
      ) 
       innerQry.add(HRestrictions.eqProperty('part', 'outer.part') 

       // Using innerQuery, this criteria returns the parts having more than one team. 
       HDetachedCriteria outerQry = HDetachedCriteria.forClass(ZZPartAndTeam.class, 'outer') 
       outerQry.setProjection(Projections.projectionList() 
        .add(Projections.distinct(Projections.property('part').as('part'))) 
      ) 
       outerQry.add(Subqueries.gt(1, innerQry)) 

       builder.addToCriteria(Property.forName('part').in(outerQry)) 
      }