我有一个呼叫方的域并且有很多受邀者。party.invitees 给我一组受邀者的集合。我只想获得一些受邀者,所以我尝试在我的服务中执行以下操作。
partInvitees= event?.invitees?.findAll{[offset: 3,max: 8]}
它没有给出正确的结果。它给了我所有的受邀者,而不是只给了我所要求的具体内容。
我有一个呼叫方的域并且有很多受邀者。party.invitees 给我一组受邀者的集合。我只想获得一些受邀者,所以我尝试在我的服务中执行以下操作。
partInvitees= event?.invitees?.findAll{[offset: 3,max: 8]}
它没有给出正确的结果。它给了我所有的受邀者,而不是只给了我所要求的具体内容。
您可以使用 GORMlist()
方法来获取域类的整个集合。如果您只想要集合的一个子集,您可以使用list()
一些参数。
如果您的域类名为Invite
,您应该使用Invite.list(max: 8, offset: 3, sort: "id", order: "asc")
来获取问题中描述的子集。请记住,不同的排序/顺序参数可能会给您不同的结果。
有关详细信息,请参阅list()
或listOrderBy()
文档。
如果你Invites
只想要一个特定的Event
,你应该阅读 Deigote 的答案。
findAll
您在那里调用的方法不是来自 GORM,而是来自Groovy Collections。因此,即使您对它进行分页(这在 Groovy 和 AFAIK 中是不可能的),您也会将整个集合带入内存。如果您不介意,请执行以下操作:
event?.invitees[offset..(offset-1)+max]
如果集合太大不想带入内存,也可以Invitee
直接查询:
Invitee.findAllByEvent(event, [offset: 3,max: 8])
但请注意,顺序不一定相同,因为 Gorms'findAllBy
不知道集合索引(我假设invitees
是一个列表)。您可以使集合索引感知,但这有点棘手。