Grails 2.0 обслуживает другое поведение в Bootstrap при использовании класса для моделирования отношений M: M - PullRequest
1 голос
/ 14 сентября 2011

Я нахожу странное поведение, когда пользуюсь сервисом от BootStrap. Рассмотрим эти классы доменов

AcademicUnit Профессор
UnitFaculty Student

У меня есть отношения 1: M между Студентом и AcademicUnit и M: N между AcademicUnit и Профессор , который я моделирую, используя класс соединения UnitFaculty . Класс UnitFaculty использует тот же базовый подход, что и класс UserRole , предоставляемый Spring Security Core , поэтому я не думаю, что есть проблема с этим подходом.

У меня есть услуги для опроса студентов и преподавателей из академической единицы.

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 показывает, что факультет - это пустой список. Но когда тот же самый сервисный метод вызывается в контроллере позже, он возвращает соответствующих преподавателей, которые были загружены на шаге процесса начальной загрузки до этого. Данные должны быть доступны. Это для студентов, которые также были загружены раньше.

Это ожидаемое поведение, и я не понимаю последствий использования M: N с составным ключом в процессе начальной загрузки или ошибки?

1 Ответ

1 голос
/ 24 января 2012

Я думаю, что ваша проблема в оптимизации Hibernate.Попробуйте использовать аргумент flush: true при сохранении.Смотри http://grails.org/doc/2.0.x/ref/Domain%20Classes/save.html

...