grails - findBy最高ID和另一个标准

时间:2016-09-15 13:00:08

标签: mysql grails gorm findby

我已经在SO和其他地方查看过这个问题的一堆答案,但我可以追踪的是人们只想找到最高id,最大dateCreated或最新数据库条目的情况但是我想要做的是检索创建的最新对象,该对象也匹配另一个条件。我的域类具有以下属性:idnumbercompanytypedateCreatedcontentcompany媒体资源只能设为' OYG'或者' BAW'并且number属性是一个自动递增的int。我想要做的是检索具有最高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.findBy 最高 NumberAndCompany(&#39; OYG&#39;)然后它应该带回id为4的对象.def doc = Document.findBy < strong>最高 NumberAndCompany(&#39; BAW&#39;)应该带回id 5的对象等。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

如果按降序排序,请将结果限制为1,这应该很容易。那么也许是这样的?

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

使用此方法,您可以创建命名查询,以便将公司名称作为参数传递。

答案 1 :(得分:1)

尽管约书亚摩尔给了你一个很好的解决方案,但在一行中还有另一个简化。

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