0

我正在尝试通过 hasMany 的特定条目来订购我的 createCriteria 查询。我的域看起来像:

class Asset {

  String name
  static hasMany = [
    supporters: SupportRole
  ]
}

class SupportRole {
  Asset asset
  Person person
  String role
}

class Person {
  String name
}

我想要做的是按角色 ='Primary' 的 Person 类对我的资产查询进行排序。如何根据条件进行连接?我想出了以下查询,但它不能正常工作:

assets = Asset.createCriteria.list() {
  supporters {
    like('role', 'Primary')
    person {
      order('name', sortOrder)
    }
  }
}

但是这个查询没有识别连接表的“角色”属性,它只是消除了没有“主要”支持角色的资产。我需要它能够处理空值(例如,给定资产没有“主要”支持角色)。

太感谢了!

4

2 回答 2

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'])
于 2013-08-02T22:17:24.303 回答
0

在这些情况下使用 hql 很好,但如果您仍然想坚持标准,那么您应该在查询中明确定义 null 条件。现在让我们省略“order by”,查询应该是这样的:

assets = Asset.createCriteria.list() {
or{
  supporters {
  like('role', 'Primary')
  }
isEmpty("supporters")
}
}
于 2013-08-05T20:03:46.037 回答