当使用类来建模M:M关系时,Grails 2.0在Bootstrap中提供不同的行为

时间:2011-09-14 06:19:04

标签: grails groovy gorm

当我使用BootStrap中的服务时,我发现了一些奇怪的行为。考虑这些域类

AcademicUnit Professor
UnitFaculty Student

学生 AcademicUnit 之间存在 1:M 关系, M:N 之间的关系 AcademicUnit 教授我正在使用连接类 UnitFaculty 进行建模。 UnitFaculty 类使用与Spring Security Core提供的 UserRole 类相同的基本方法,因此我不认为该方法存在问题。

我有一个咨询学术单位的学生和教师的服务。

ProfessorService StudentService

从概念上讲,它们做同样的事情,并且它们在应用程序运行时都能正常工作。

我正在尝试预先填充Bootstrap中的一些数据。问题出现在ResearchCreation中。相关摘录是:

private static void addASUEngineeringAffiliated(){
    def students = studentService.getASUEngineeringEducationStudents()
    students.each{
        def researcher = Researcher.findByName(it.name) ?:
            new Researcher(name:it.name, email:it.email).save(failOnError:true)
    }
    def faculty = professorService.getASUEngineeeringEducationFaculty()
    println "faculty is ${faculty}"
    faculty.each{
        def researcher = Researcher.findByName(it.name) ?:
            new Researcher(name:it.name, email:it.email).save(failOnError:true)
    }
}

当我启动应用程序时,println显示faculty是一个空列表。但是,当稍后在控制器中调用相同的服务方法时,它将返回相关的教师成员,这些成员在此之前的Bootstrap过程中加载。数据应该可用。它适用于之前也装过的学生。

这是预期的行为,我不了解在引导过程中使用复合键M或N的后果,还是错误?

1 个答案:

答案 0 :(得分:1)

我认为您的问题是Hibernate优化。尝试在保存时使用参数flush:true。见http://grails.org/doc/2.0.x/ref/Domain%20Classes/save.html