2010-06-13 4 views
1

J'essaie de créer une relation très simple entre deux objets. Quelqu'un peut-il m'expliquer pourquoi je ne trouve pas l'objet Company via la méthode findBy?Pourquoi les relations one-to-one ne fonctionnent-elles pas?

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 = { 
    } 
} 

Répondre

3

Un champ appelé desc conflits avec le mot-clé de base de données pour tri décroissant. Par défaut, un champ est nullable:false dans Grails. Donc d'abord renommer ce champ pour par exemple description puis en fournir un ou marquer ce champ comme nullable:true dans vos contraintes.

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 
    }  
} 

Rappelez-vous que vous pouvez toujours vérifier les erreurs qui empêchent Grails d'enregistrer vos objets à la base de données facilement:

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

Merci de l'aide! Tu as raison! – eugenn

Questions connexes