kay*_*lnn 3 grails groovy grails-orm
在grails中,
如何在一对多关系中找到所有孩子,例如,
class Employee {
static hasMany = [ subordinates: Employee ]
static belongsTo = [ manager: Employee ]
}
Run Code Online (Sandbox Code Playgroud)
使用单个管理器,如何获得所有下属的下属(如遍历对象图)?
Col*_*ton 12
如果您不想修改域,则递归闭包有效.否则,您可以向Employee域类添加一个瞬态属性allSubordinates,如下例所示:
class Employee {
String name
static hasMany = [ subordinates: Employee ]
static belongsTo = [ manager: Employee ]
static transients = ['allSubordinates']
def getAllSubordinates() {
return subordinates ? subordinates*.allSubordinates.flatten() + subordinates : []
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个集成测试,可以看到它的实际效果:
import grails.test.*
class EmployeeTests extends GrailsUnitTestCase {
Employee ceo
Employee middleManager1, middleManager2
Employee e1, e2, e3, e4, e5, e6
protected void setUp() {
super.setUp()
ceo = new Employee(name:"CEO")
middleManager1 = new Employee(name:"Middle Manager 1")
e1 = new Employee(name:"e1")
e2 = new Employee(name:"e2")
e3 = new Employee(name:"e3")
middleManager2 = new Employee(name:"Middle Manager 2")
e4 = new Employee(name:"e4")
e5 = new Employee(name:"e5")
e6 = new Employee(name:"e6")
ceo.subordinates = [middleManager1, middleManager2]
middleManager1.subordinates = [e1,e2,e3]
middleManager2.subordinates = [e4,e5,e6]
assert ceo.save()
}
void testAllSubordinates() {
def topLevelManager = Employee.get(ceo.id)
assertNotNull(topLevelManager);
assertEquals(8, topLevelManager.allSubordinates?.size())
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6427 次 |
| 最近记录: |