grails - 查找最高 ID 和另一个标准

grails - findBy highest id AND another criteria

我在 SO 和其他地方看了很多关于这个问题的答案,但我所能找到的只是人们只想找到最高 ID、最大创建日期或最新数据库条目的情况,但我想要做的是检索创建的最新对象,该对象也符合另一个条件。我的域 class 具有以下属性:idnumbercompanytypedateCreatedcontentcompany 属性 只能设置为 'OYG' 或 'BAW' 而 number 属性 是一个自动递增的整数。我想要做的是检索具有最高 number 的记录,该记录的 company 属性 也设置为 'OYG' 或 'BAW`。

下面是一个例子:

+----------------------------------------------------------+
| id |  number | company |   type  | dateCreated | content |
+----------------------------------------------------------+
|  1 |    0    |   OYG   | TsAndCs |  15/09/2016 |  stuff  |
|  2 |    0    |   BAW   | TsAndCs |  15/09/2016 |  stuff  |  
|  3 |    1    |   OYG   | TsAndCs |  16/09/2016 |  stuff  | 
|  4 |    2    |   OYG   | TsAndCs |  17/09/2016 |  stuff  | 
|  5 |    1    |   BAW   | TsAndCs |  16/09/2016 |  stuff  | 
+----------------------------------------------------------+

我想说 def doc = Document.findByHighestNumberAndCompany('OYG') 那么它应该带回 id 为 4 的对象。 def doc = Document.findByHighestNumberAndCompany('BAW') 应该带回 id 5 的对象等

如有任何帮助,我们将不胜感激。谢谢!

如果您按数字降序排列并将结果限制为一个,应该很容易。所以也许是这样的?

String companyName = 'OYG'
def results = MyDomain.createCriteria().list() {
    eq("company", companyName)
    maxResults(1)
    order("number", "desc")
}
println results[0].id // will print 4

使用这种方法,您可以创建一个命名查询,这样您就可以将公司名称作为参数传递。

尽管 Joshua Moore 为您提供了一个很好的解决方案,但一行中还有另一个更简单的方法。

MyDomain.findAllByCompany(company, [sort: 'number', order: 'desc', limit: 1])?.first()