Grails не сохраняет поле домена - PullRequest
0 голосов
/ 16 мая 2018

У меня есть два класса домена

class Country {
     ... // some fields, including other domains
}

class City {
     ... // some fields, including other domains
     Country itsCountry
}

Один из моих методов обслуживания здесь:

City createCity(String name, Country country) {
    // country is existing and loaded in the controller's layer and passed here
    City city = new City()
    city.itsCountry = country // it is not persisted
    city.save('flush':true)
}

Проблема в том, что в базе данных города указана нулевая страна. Конечно, я упростил пример, на самом деле он сложнее. (К сожалению, некоторые важные детали могут быть потеряны, надеюсь, если вы столкнулись с этой проблемой, вы разделяете причину)

Что я сделал без успеха:

  1. играя со страной, получая его по id внутри метода сервиса, сохраняйте и сбрасывайте его перед сохранением объекта City
  2. делает поле itsCountry не обнуляемым. Итак, я получил исключение из базы данных, что это поле не может быть пустым.

Я чувствую, что это должно быть что-то тривиальное. Что может быть причиной этого?

1 Ответ

0 голосов
/ 19 мая 2018

в Grails мы уже можем получить идентификатор страны в параметрах.как, например, params? .countryId.

Если это новая запись для таблицы стран, то сначала создайте новый объект для страны и назначьте в объекте city.

Например,

Country country = new Country()//for new record
country.name=params?.countryName
City city=new City()
city.itsCountry = country 
city.save('flush':true)

Если у вас уже есть запись о стране в таблице, используйте метод get, чтобы получить объект и присвоить его городу.

Например,

Country country=Country.get(Long.valueOf(params?.countryId))
city.itsCountry = country 
city.save('flush':true)

Надеюсь, это поможет вам,Если есть сомнения, пожалуйста, пингуйте меня.

...