【发布时间】:2011-04-01 03:45:02
【问题描述】:
如何从命令 .list() 获取 Grails 对象返回列表中的第一个元素,但不使用 Java 方法。我的意思是在调用 .list() 时我们是否有任何选择顶部元素的选项,类似于 SQL 查询 SELECT TOP FROM 。
我不喜欢用这个:
List domains = Domain.list()
return domains.get(0)
因为它会占用大量内存资源。 非常感谢!
【问题讨论】:
如何从命令 .list() 获取 Grails 对象返回列表中的第一个元素,但不使用 Java 方法。我的意思是在调用 .list() 时我们是否有任何选择顶部元素的选项,类似于 SQL 查询 SELECT TOP FROM 。
我不喜欢用这个:
List domains = Domain.list()
return domains.get(0)
因为它会占用大量内存资源。 非常感谢!
【问题讨论】:
一种快速的方法是将 max 参数与list 一起使用
Domain.list([max:1])
或者您可以使用我相信的条件查询:
def domainCriteria = Domain.createCriteria()
def firstDomain = domainCriteria.list{
maxResults( 1 )
order( 'id', 'asc' )
}[0]
【讨论】:
list :-/
uniqueResult = true,它将返回对象或 null 而不是列表。如果匹配多个对象,则会引发异常。
截至Grails 2.1.1、first() 和last() 已添加方法。
def firstResult = Domain.first()
和
def lastResult = Domain.last()
【讨论】:
另一种方法是使用find,它返回第一个结果,如果表为空,则返回 null。
User.find("from User")
如果你想要多个,你也可以使用findAll和一个max参数
User.findAll("from User", [max: 10])
如果您真的只想要表中的任何对象,那么list 可能是您最好的选择,但大多数时候,对于这些类型的查询,您希望对其进行更多限制并使用 HQL可以很容易地做到这一点。
【讨论】: