Почему отношения один на один не работают? - PullRequest
1 голос
/ 13 июня 2010

Я пытаюсь создать очень простые отношения между двумя объектами. Кто-нибудь может объяснить, почему я не могу найти объект Company с помощью метода findBy?

class Company {
    String name
    String desc
    City city
    static constraints = {
        city(unique: true)
    }
}
class City {
    String name
    static constraints = {
    }
}
class BootStrap {
    def init = { servletContext ->
        new City(name: 'Tokyo').save()
        new City(name: 'New York').save()

        new Company(name: 'company', city: City.findByName('New York')).save()

        def c = Company.findByName('company') // Why c=null????!
    }
    def destroy = {
    }
} 

1 Ответ

3 голосов
/ 13 июня 2010

Поле с именем desc конфликтует с ключевым словом базы данных для сортировки по убыванию.По умолчанию поле имеет значение nullable:false в Grails.Поэтому сначала переименуйте это поле, например, на description, а затем укажите его или пометьте это поле как nullable:true в ваших ограничениях.

class BootStrap {
  def init = { servletContext ->
    new City(name: 'Tokyo').save()
    new City(name: 'New York').save()
    new Company(name: 'company', city: City.findByName("New York")).save()
    assert Company.findByName('company') != null
  }    
} 

Помните, что вы всегда можете проверить ошибки, мешающие сохранению GrailsВаши объекты в базу данных легко:

def invalidCompany = new Company() // missing required name property
if (!invalidCompany.validate())
    invalidCompany.errors.each { println it }
...