在Grails中,我有以下4个域类:
package com.whatever.ts4
class A_class {
String aName
static hasMany = [b_class: B_class]
}
package com.whatever.ts4
class B_class {
String bName
A_class a_class
static hasMany = [c_class: C_class]
static belongsTo = [A_class]
}
package com.whatever.ts4
class C_class {
String cName
B_class b_class
static hasMany = [d_class: D_class]
static belongsTo = [B_class]
}
package com.whatever.ts4
class D_class {
Long rowNumber
String dataValue
C_class c_class
static belongsTo = [C_class]
}
简单的ER图: A_class 1 =>很多B_class 1 =>很多C_class 1 =>很多D_class
我在BootStrap.groovy中成功填充了它们
现在,给定一个A_class id,我需要获得一个包含这些列的集合:
aName,bName,cName,rowNumber,dataValue
我可以使用namedQueries吗?
我已经尝试将它放在A_class域类中:
static namedQueries = {
myNamedQuery { aid ->
createAlias b_class,'b'
createAlias 'b.c_class','c'
createAlias 'c.d_class','d'
eq 'id',aid
}
}
我喜欢命名查询的想法,因为需要为不同的A_class id返回此结果集。我可以利用服务来准备数据,并通过控制器调用它,将其渲染为JSON(我离题)。但是,也许有一种Groovier方式?
答案 0 :(得分:0)
您不需要针对此类操作的命名查询。您将从A_class实体获取所需的所有信息。例如:
def a_class_entity = A_class.get(id)
def b_names = a_class_entity.b_class.bName // set of all bNames
//<-- Not sure if flatten() works with spread collection fields, but it should -->
def c_names = a_class_entity.b_class.c_class.flatten().cName // collection of all cNames
def rowNumbers = a_class_entity.b_class.c_class.d_class.flatten().rowNumber // collection of all rowNumbers
def dataValues = a_class_entity.b_class.c_class.d_class.flatten().dataValue // collection of all dataValues