我有一個叫做派對的域,有很多被邀請者。 party.invitees給我一個被邀請者的集合集合。 我只想得到一些受邀者,所以我嘗試在我的服務中做下面的事情。Grails-如何獲得集合集合中的部分值?
partInvitees= event?.invitees?.findAll{[offset: 3,max: 8]}
它沒有給出正確的結果。它給我所有的被邀請者,而不僅僅是我所問的具體情況。
我有一個叫做派對的域,有很多被邀請者。 party.invitees給我一個被邀請者的集合集合。 我只想得到一些受邀者,所以我嘗試在我的服務中做下面的事情。Grails-如何獲得集合集合中的部分值?
partInvitees= event?.invitees?.findAll{[offset: 3,max: 8]}
它沒有給出正確的結果。它給我所有的被邀請者,而不僅僅是我所問的具體情況。
您在此處調用的方法不是來自GORM,而是來自Groovy Collections。因此,即使您對它進行分頁(這在Groovy,AFAIK中不可能直接使用),您將把整個集合帶入內存。如果你不介意,只是做:
event?.invitees[offset..(offset-1)+max]
如果集合過大,你不希望將其帶到內存,還可以直接查詢Invitee
:
Invitee.findAllByEvent(event, [offset: 3,max: 8])
但知道,爲了將不一定是相同,因爲Gorms' findAllBy
不知道集合索引(我假設invitees
是一個列表)。您可以使集合索引感知,但it's a bit tricky。
我不確定這句話是否正確:「你在那裏調用的'findAll'方法不是來自GORM ...」。 [Grails Docs中的findAll方法](http://grails.github.io/grails-doc/latest/ref/Domain%20Classes/findAll.html)中的** Description **部分說:「findAll方法允許使用Hibernate的查詢語言HQL查詢並通過示例查詢......「。所以,如果在Grails領域運行,那麼'find *'方法確實會被提升爲我相信的GORM公民。 – mohsenmadi
這僅適用於針對域類調用的方法,就好像它們是靜態AFAIK一樣。 IntelliJ Idea似乎同意 - 如果我嘗試訪問針對集合調用的findAllBy的定義,它會告訴我「DefaultGroovyMethods」。另外,對於類型爲集合的屬性,文檔沒有意義 - 您期望做到這一點:event?.invitees.findAll(「from ...」)? – Deigote
(我的評論給人的印象是我不確定,但我只是更詳細地介紹一些論點,而不是說「不,不是」......但我確實確信它就是這樣:) – Deigote
您可以使用GORM list()
方法來獲取域類的整個集合。如果你只想要一個集合的子集,你可以使用list()
和一些參數。
如果您的域名類別名稱爲Invite
,則應使用Invite.list(max: 8, offset: 3, sort: "id", order: "asc")
來獲取問題中描述的子集。請記住,不同的排序/順序參數可能會給你不同的結果。
有關更多信息,請參閱list()
或listOrderBy()
文檔。
如果你想要Invites
只適用於特定的Event
你應該閱讀Deigote的答案。
您需要將篩選條件放在findAll閉包中。 – Abs
@ Abs-我應該如何添加它? –