我有两个这样的域名:
class Color {
static hasMany = [shade: Shade]
String colorName
String colorType
}
class Shade {
static belongsTo = [color: Color]
String shadeName
boolean isAvailable
}
我想找出所有colors
个shades
不可用的内容:
所以如果我的数据是这样的:
ID color_name color_type
---- -------- ----------
22 RED CRAYON
23 GREEN PAINT
45 GREY CRAYON
ID color_id shade_name is_available
--- ---------- ------------- ----------
2 22 DARK false
3 22 LIGHT true
4 23 DARK true
5 23 LIGHT true
6 45 DARK false
7 45 LIGHT false
我希望我的结果大小为2,其中包含ids 22 and 45
的颜色项,因为它们有一些not available
我尝试了这个查询,但我不完全确定这是否会返回我想要的内容
def query = Color.where {
shade.isAvailable == false
}
def list = query.list()
当我查看hibernate为此生成的sql时,我没有注意到任何group by
子句,并且select语句从color
和shade
获得了颜色
答案 0 :(得分:1)
您可以使用Criteria或HQL来获取所需内容:
//Criteria Approach:
//In this approach "shade" will be fetched eagerly with color
def colors = Color.createCriteria().listDistinct{
shade{
eq('isAvailable', false)
}
}
//HQL
//In this approach only color will be fetched
//without shade, unless specified as ".... inner join fetch c.shade ..."
def colors = Color.executeQuery("select distinct c from Color as c \
inner join c.shade as s \
where s.isAvailable is false")
我更喜欢hasMany
关联的复数符号,因此我会使用shades
代替shade
(使关系更加生动)。
答案 1 :(得分:0)
HQL是最简单的IMO
Shade.executeQuery("select distinct s.color from Shade s where s.isAvailable = false")