Почему отношения один на один не работают?

Я пытаюсь создать очень простую связь между двумя объектами. Может ли кто-нибудь объяснить мне, почему я не могу найти объект 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 = {
    }
} 

person eugenn    schedule 13.06.2010    source источник


Ответы (1)


Поле с именем 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 }
person stefanglase    schedule 13.06.2010