我有一个这样的域:
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)