2010-06-13 55 views
1

我正試圖在兩個對象之間創建一個非常簡單的關係。任何人都可以解釋我爲什麼無法通過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 = { 
    } 
} 

回答

3

一個名爲desc的字段與數據庫關鍵字衝突以進行降序排序。默認情況下,Grails中的某個字段爲nullable:false。因此,首先將該字段重命名爲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 } 
+0

感謝您的幫助!你是對的! – eugenn 2010-06-13 17:25:21

相關問題