Grails 3子类中的查询条件



我有一个这样的域:

class Container {
Content content
}
class Content {
}
class ContentAlpha extends Content {
String name
}
class ContentBeta extends Content {
int length
}

然后我有一个标准:

def result = Container.withCriteria {
content {
eq('name', 'Pablo')
}
}

如何获取仅包含与"name"给定值匹配的ContentAlpha的所有容器?

从OOP的角度来看,我认为您尝试使用的withCriteria闭包在概念上是错误的。

一般来说,超类不包含关于其子类的信息。相反,子类确实包含关于其超类的信息。

在您的示例中,ContentAlpha的实例也是Content。但是,Content的实例不是ContentAlpha。因此,不能查询content.name,因为name不作为Content类的属性存在。

话虽如此,让我提出一个基本提示(承认我不知道你试图解决的问题的上下文,并假设你不能改变你的域的关系(:

您可以在Container.groovy:中添加几个静态函数

static def queryContent(String name) {
return Container.findAllByContentInList(ContentAlpha.findAllByName(name))
}

static def queryContent(int length) {
return Container.findAllByContentInList(ContentBeta.findAllByLength(length))
}

然后你可以做这样的事情:

def containersA = Container.queryContent("Pablo")
def containersB = Container.queryContent(4000)

最新更新