Grails有很多反方位吗?

时间:2014-02-05 20:06:15

标签: grails gorm has-many

当使用hasMany和belongsTo时,我可以从源导航,但不能从目标向后导航到关系源。

示例Grails代码:

class School {
  hasMany [students : Student]
}

class Student {
  belongsTo [school : school]
}

// Following works
School scl = new School()
scl.addToStudents(new Student("firstStudent"))
scl.addToStudents(new Student("secondStudent"))
scl.save()
assertEquals(2, scl.students.size())

// Following does not work
School scl = new School()
scl.save() // so that it generated ID and persisted
Student std = new Student(school: scl)
std.save()
assertEquals(2, std.school.students) // This FAILS!

为什么我们从学生查询失败?我的理解是它应该有用。

2 个答案:

答案 0 :(得分:2)

最后一行应该是:

assertEquals(1, std.school.students.size())

而不是

assertEquals(2, std.school.students)

在断言之前,还要尝试重新读取对象状态。

答案 1 :(得分:0)

By Burt Beckwith

  

由于对Hibernate的混淆,重新读取实例通常是无操作的。如果你得到()一个实例或重新查询多个并且它们已经与会话相关联,那么你将获得相同的实例。您需要清除会话(以及flush()以获得良好的衡量标准)才能使其生效。这很简单,例如AnyDomainClass.withSession {it.flush(); it.clear()} - Burt Beckwith 6小时前

此解决方案有效!