Grails2.0在使用类对M:M关系建模时,在引导过程中服务不同的行为

Grails2.0在使用类对M:M关系建模时,在引导过程中服务不同的行为,grails,groovy,gorm,Grails,Groovy,Gorm,当我使用BootStrap中的服务时,我发现了奇怪的行为。考虑这些域类 我在学生和学术单位之间有一个1:M的关系,在学术单位和教授之间有一个M:N的关系,我正在使用join class联合学院建模。UnitFaculty类使用与所提供的UserRole类相同的基本方法,因此我认为这种方法没有问题 我有一个学术单位的学生和教员查询服务 从概念上讲,它们做相同的事情,并且当应用程序运行时,它们都可以正常工作 我正在尝试在中预填充一些数据。问题发生在。相关的代码片段是: private st

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


我在学生学术单位之间有一个1:M的关系,在学术单位教授之间有一个M:N的关系,我正在使用join class联合学院建模。UnitFaculty类使用与所提供的UserRole类相同的基本方法,因此我认为这种方法没有问题

我有一个学术单位的学生和教员查询服务

从概念上讲,它们做相同的事情,并且当应用程序运行时,它们都可以正常工作

我正在尝试在中预填充一些数据。问题发生在。相关的代码片段是:

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显示的是一个空列表。但是,当稍后在控制器中调用相同的服务方法时,它会返回相关的教员,他们在引导过程的一个步骤中被加载。数据应该是可用的。这是给学生们的,他们以前也上过课


这是预期的行为吗?我不理解在引导过程中使用带有复合键的m:N的后果,还是一个bug

我认为您的问题在于休眠优化。尝试在保存时使用参数flush:true。请参见

我认为您的问题在于休眠优化。尝试在保存时使用参数flush:true。看