2016-08-17 84 views
0

你好,我有這兩類出錯創建對象

class Company { 
    String company_name 
    static constraints = { 
     company_name size: 3..20, unique: true, nullable: false 
    } 
    String toString() { return company_name} 
} 

class Job {  
    String job_name 
    Company company 

    static constraints = { 
     job_name size: 3..20, unique: false, nullable: false 
     company nullable: false 
    } 
    String toString() { return job_name} 
} 

而且這種方法:

def register(String company_name,String job_name) 
{ 
    def job = new Job(company : new Company(company_name : company_name), job_name: job_name) 
    if (job.validate() && job.save()) 
    { 
     redirect(url:"https//localhost:8080") 
    } 
} 

我可以例如Company:nvidiaJob:worker創建對象,但如果我試圖創建的另一個位置公司nvidia- Company:nvidia,Job:owner我得到一個錯誤,爲什麼呢?它是在if條款

回答

0

你有一個unique約束在company_name屬性和您的代碼試圖創建一個新的Company實例與每個新的Job實例。

你應該做的是這樣的:

def nvidiaCompany = new Company(company_name: 'nVidia').save() 

def jobDesigner = new Job(company: nvidiaCompany, job_name: 'designer') 
def jobDeveloper = new Job(company: nvidiaCompany, job_name: 'developer') 

所以你重用Company實例。如果你在代碼中只創建一個Job情況下,你必須首先獲得Company實例:

def nvidiaCompany = Company.findByCompanyName('nvidia') 
def jobDesigner = new Job(company: nvidiaCompany, job_name: 'designer') 
+0

它可以通過兩件事情引起的。首先,您在屬性名稱('company_name',而不是通常的'companyName')中使用下劃線。其次,它依賴於你的IDE,因爲這些方法是在編譯/運行期間動態添加的,IntelliJ的工作通常很好,不確定關於Eclipse/STS,Grails/Groovy支持上次還是不夠完善 –

+0

非常感謝出去! :) – user6725249

+0

不錯,不客氣:-) –