当我使用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的后果,还是错误?
答案 0 :(得分:1)
我认为您的问题是Hibernate优化。尝试在保存时使用参数flush:true。见http://grails.org/doc/2.0.x/ref/Domain%20Classes/save.html