Grails在hasMany中获得任何孩子

Mik*_*key 6 grails has-many grails-orm

我有一个域类,其中包含许多其他域类.我想要任何一个孩子而不关心哪个.例

class MyDomainClass {
  static hasMany = [thingies:OtherDomainClass]
}
Run Code Online (Sandbox Code Playgroud)

我可以用愚蠢的方式做到这一点:

def findOne
myInstance.thingies.each{
  findOne=it
}
Run Code Online (Sandbox Code Playgroud)

但有没有更好的方式:

def findOne = myInstance.thingies.grabTheMostConvenientOne()
Run Code Online (Sandbox Code Playgroud)

Rob*_*ska 9

thingies是一个收藏品,所以你可以随意使用Collection中的所有东西.

您可以这样做的一个简单方法是:

def one = myInstance.thingies.asList().first()
Run Code Online (Sandbox Code Playgroud)

但是,您可能希望确保集合实际上首先包含一些元素.first()如果列表为空,文档没有明确说抛出IndexOutOfBoundsException,但我感觉它仍然可能.如果是这种情况,您可能需要:

def one = myInstance.thingies.size() > 0 ? myInstance.thingies.asList().first() : null
Run Code Online (Sandbox Code Playgroud)

或者,如果你想以牺牲一些可读性为代之以超简洁,你可以使用这种方法(John Wagenleitner提供):

def one = myInstance.thingies?.find { true }
Run Code Online (Sandbox Code Playgroud)