我尝试通过hasMany的特定条目来命令我的createCriteria查询。我的域名看起来像:
class Asset {
String name
static hasMany = [
supporters: SupportRole
]
}
class SupportRole {
Asset asset
Person person
String role
}
class Person {
String name
}
我想要做的是按Person类查询Assets,其中role ='Primary'。你如何根据条件进行加入?我提出了以下查询,但它无法正常工作:
assets = Asset.createCriteria.list() {
supporters {
like('role', 'Primary')
person {
order('name', sortOrder)
}
}
}
但是这个查询没有识别连接表的“角色”属性,它只是消除了没有“主要”SupportRole的资产。我需要它能够处理空值(例如,给定资产没有“主要”SupportRole)。
万分感谢!
答案 0 :(得分:2)
标准可以很容易地转换为HQL,如下所示,无需处理投影和别名。
def assets = Asset.executeQuery("select a from Asset as a \
inner join a.supporters as s \
inner join s.person as p \
where s.role = 'Primary' \
order by p.name = :sortOrder",
[sortOrder: 'desc'])
答案 1 :(得分:0)
在这些情况下使用hql是好的,但是如果你仍然想要坚持使用标准,那么你应该在查询中明确定义null条件。我们现在省略'order by',查询应该是这样的:
assets = Asset.createCriteria.list() {
or{
supporters {
like('role', 'Primary')
}
isEmpty("supporters")
}
}