我很好奇如何使用条件构建器来访问继承类的字段。
我们假设我们有以下课程:
class A {
String fieldOne
String fieldTwo
static hasMany = [childs: AbstractChildClass]
}
并且抽象子类看起来像这样:
abstract class AbstractChildClass {
Integer valueOne
Integer valueTwo
A a
static mapping
tablePerHierarchy false
}
}
当然有几个扩展类,例如:
class ExtendingClassOne extends AbstractChildClass {
DesiredObject desiredObject
static mapping = {
tablePerHierarchy false
}
}
我们还假设有DesiredObject类,如下所示:
class DesiredObject {
String infoA
String infoB
}
问题是如何通过为A类创建标准来获取字段infoA和infoB。到目前为止我的方法是:
A.createCriteria().list {
childs {
desiredObject {
ilike('infoA', '%something%')
}
}
}
这当然不起作用,因为在表中,ExtendingClassOne只是desiredObject的id,我不知道如何将对象与条件构建器连接以获取其字段。
感谢您的阅读。
马
答案 0 :(得分:2)
不要期望您的域名模型与其相关的数据库架构之间100%匹配。
在您的情况下,多态性仅适用于AbstractChildClass的tablePerHierarchy true
。
如果你想坚持使用tablePerHierarchy false
,你可以定义你的类:
class A {
static hasMany = [ childrenOne:ExtendingClassOne, childrenTwo:ExtendingClassTwo ]
}
因此您的查询将如下:
A.withCriteria{
for( String c in [ 'childrenOne', 'childrenTwo' ] ){
"$c"{
desiredObject {
ilike('infoA', '%something%')
}
}
}
}