пожалуйста, помогите с нулевым исключением при добавлении данных с помощью Grails

Я пытаюсь добавить данные в базу данных в Grails, но получаю эту ошибку:

Ошибка 500: выполнение действия [getData] контроллера [mgr.CollectDataEntryController] вызвало исключение: groovy.lang.MissingMethodException: нет подписи метода: static groovy.lang.MissingMethodException.addToAlumConnectionEducations() применимо для типов аргументов: (mgr.AlumConnectionEducations) значения: [mgr.AlumConnectionEducations: null]

где CollectDataEntryController — контроллер, выполняющий работу. вот фрагмент кода из этого контроллера:

saveNewAlum.addToAlumConnectionEducations(new AlumConnectionEducations(alumConnectionsId:connectionId, degree:alumConnectionEduDegree,endDate:alumConnectionEduEndDate,fieldOfStdudy:alumConnectionEduFieldOfStudy,schoolName:alumConnectionEduSchoolName,startDate:alumConnectionEduStartDate))

домен, AlumConnectionEducations, принадлежит к отношениям «один ко многим» с другим доменом, AlumConnections, который, в свою очередь, относится к отношениям «один ко многим» с другим доменом, alumProfile.

в моем коде я сначала добавляю домен AlumConnection, который отлично работает, но когда я затем пытаюсь добавить AlumConnectionEducations, я получаю указанную выше ошибку. кто-нибудь знает, что я делаю неправильно?

спасибо Джейсон

    package mgr
    import java.util.Date;
    class AlumConnections  {
String linkedinId
String firstName
String lastName
String headline
String locationName
String locationCode
String industry
    Date dateCreated
Date lastUpdated
long version
static belongsTo = [alumProfile:AlumProfile]
static hasMany = [  
alumConnectionEducations    :   AlumConnectionEducations
 ]
static mapping = {
    cache true

    columns {       
        linkedinId      type:'text'
        firstName       type:'text'
        lastName        type:'text'
        headline        type:'text'
        locationName    type:'text'
        locationCode    type:'text'
        industry        type:'text'

    }
}
static constraints = {  
    linkedinId      (nullable:false, blank:false)
    firstName       (nullable:true)
    lastName        (nullable:true)
    headline        (nullable:true)
    locationName    (nullable:true)
    locationCode    (nullable:true)
    industry        (nullable:true)

}
  }         

в контроллере, который вызывает домены:

  def saveNewAlum = ""
  saveNewAlum = new AlumProfile(firstName:linkedinFirstName, lastName:linkedinLastName, dob:newDate,industry:linkedinIndustry, oAuthToken:oAuthtoken, secretKey:secretKey)

  saveNewAlum.addToAlumConnections(new   AlumConnections(linkedinId:connectionId,firstName:connectionFName, lastName:connectionLName, headline:connectionHeadline, locationName:connectionLocationname, locationCode:connectionLocationCode,industry:connectionIndustry))

Приведенный выше код отлично работает и сохраняется в базе данных MySQL. только когда я пытаюсь создать saveNewAlum.addToAlumConnectionEducations, я получаю сообщение об ошибке


person jason    schedule 21.07.2011    source источник
comment
Можете ли вы опубликовать свой код для AlumConnections?   -  person Pat    schedule 21.07.2011
comment
я добавил его к моему предыдущему вопросу, так как не мог добавить его в комментарий.   -  person jason    schedule 21.07.2011
comment
Можете ли вы также добавить код, создающий переменную saveNewAlum? Вы убедились, что это действительно экземпляр AlumConnections?   -  person Rob Hruska    schedule 22.07.2011
comment
Спасибо за ваш ответ. Я добавил код saveNewAlum в первый пост. да, я проверил, что saveNewAlum работает нормально, так как сохраняет в базе данных MySQL без ошибок   -  person jason    schedule 22.07.2011
comment
может быть, что-то не так: у меня отношения "один ко многим". чтобы сохранить его, я сначала создаю родителя (saveNewAlum), затем, чтобы добавить его различные дочерние элементы (те объекты, которые ему принадлежат), я делаю это: saveNewAlum.addToAlumConnections(new AlumConnections(...)) но проблема в том, что мне нужно чтобы узнать, как взять одного из дочерних элементов и создать с ним объект «один ко многим» и еще один объект (alumConnectionEducations). Итак, должен ли я сделать что-то вроде этого: saveNewAlum.AlumConnections.addToAlumConnectionEducations(new AlumConnections.Educations(...))?   -  person jason    schedule 22.07.2011


Ответы (1)


Ну, это заняло весь день, но я понял. Итак, мое предположение казалось верным, проблема была в «один-ко-многим» с «один-ко-многим». вот как я это исправил. Домены были именно такими, как у меня были. в контроллере: сначала я создаю главного родителя:

         saveNewAlum=new AlumProfile(firstName:linkedinFirstName, lastName:linkedinLastName, dob:newDate, industry:linkedinIndustry, oAuthToken:oAuthtoken, secretKey:secretKey)

затем я создаю объект, который будет добавлен к ребенку:

     myConnection= new AlumConnections(linkedinId:connectionId,firstName:connectionFName,lastName:connectionLName,headline:connectionHeadline,locationName:connectionLocationname, locationCode:connectionLocationCode,industry:connectionIndustry)

затем я сохраняю дочерний элемент для родителя:

    saveNewAlum.addToAlumConnections(myConnection)

затем я создаю объект для сохранения дочернему ребенку:

  newConnectionEdu=  new AlumConnectionEducations(
              degree:alumConnectionEduDegree,
              endDate:alumConnectionEduEndDate,
              fieldOfStudy:alumConnectionEduFieldOfStudy,
              schoolName:alumConnectionEduSchoolName,
              startDate:alumConnectionEduStartDate)

затем, наконец, я добавляю дочерний элемент к дочернему:

 myConnection.addToAlumConnectionEducations(newConnectionEdu)

и вот как вы добавляете ребенка к ребенку!

person jason    schedule 22.07.2011
comment
вы также можете поиграть с каскадированием для того же. - person Vinay Prajapati; 28.10.2015