grails - 查找最高 ID 和另一个标准
grails - findBy highest id AND another criteria
我在 SO 和其他地方看了很多关于这个问题的答案,但我所能找到的只是人们只想找到最高 ID、最大创建日期或最新数据库条目的情况,但我想要做的是检索创建的最新对象,该对象也符合另一个条件。我的域 class 具有以下属性:id
、number
、company
、type
、dateCreated
和 content
。 company
属性 只能设置为 '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()
我在 SO 和其他地方看了很多关于这个问题的答案,但我所能找到的只是人们只想找到最高 ID、最大创建日期或最新数据库条目的情况,但我想要做的是检索创建的最新对象,该对象也符合另一个条件。我的域 class 具有以下属性:id
、number
、company
、type
、dateCreated
和 content
。 company
属性 只能设置为 '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()