2012-09-22 173 views
0

我收到以下錯誤,當我嘗試保存域類,Grails中:Grails領域類保存

法無簽名:java.lang.String.save()的參數類型是適用的:()值:[] 可能的解決方案:size(),size(),take(int),wait(),any(),wait(long)。 Stacktrace如下:

我有一個將XML字符串映射到域對象的服務。然後我嘗試保存域名並獲取該錯誤。我已經調試過並知道所有的數據都是有效的。這裏是我的代碼:

def newProfile=""; 

     newProfile = new LinkedinProfile(
     firstName    : "${linkedinProfileFeed.'first-name'}", 
     lastName    : "${linkedinProfileFeed.'last-name'}", 
     dobYear     : "${linkedinProfileFeed.'date-of-birth'.'year'}", 
     dobMonth    : "${linkedinProfileFeed.'date-of-birth'.'month'}", 
     dobDay     : "${linkedinProfileFeed.'date-of-birth'.'day'}" , 
     imgUrl     : "${linkedinProfileFeed.'picture-url'}", 
     siteStandardAddress  : "${linkedinProfileFeed.'site-standard-profile-request'}",   
     oAuthToken    : accessTokenKey.toString(), 
     secretKey    : accessTokenSecret.toString() 
     ) 
     .id="${linkedinProfileFeed.id}".toString() 

     log.debug("${linkedinProfileFeed.id}".toString()) 
     log.debug("${linkedinProfileFeed.'first-name'}") 
     log.debug("${linkedinProfileFeed.'last-name'}") 
     log.debug("${linkedinProfileFeed.'date-of-birth'.'year'}") 
     log.debug("${linkedinProfileFeed.'date-of-birth'.'month'}") 
     log.debug("${linkedinProfileFeed.'date-of-birth'.'day'}") 
     log.debug("${linkedinProfileFeed.'picture-url'}") 
     log.debug("${linkedinProfileFeed.'site-standard-profile-request'}") 
     log.debug(accessTokenKey.toString()) 
     log.debug(accessTokenSecret.toString()) 
     log.debug("end debug") 





     newProfile.save(); 

而且,我不熟悉Grails和SpringSource的,但在.NET中,我可以訪問使用點運算符的對象的屬性。例如,如果我有一個如上所述的對象,我可以只輸入newProfile。並可以訪問所有的屬性。在grails中這沒有發生。這是由設計或我的代碼中的錯誤?

下面是我的域類。

class LinkedinProfile { 
String firstName 
String lastName 
String dobYear 
String dobMonth 
String dobDay 
String oAuthToken 
String secretKey 
String id 
String imgUrl 
String siteStandardAddress 
Date dateCreated 
Date lastUpdated 
long version 

static hasMany = [ 
    linkedinLocation  : LinkedinLocation, 
    linkedinSkill   : LinkedinSkill 
] 

static mapping = { 
    cache true 
    id generator: 'assigned' 

    columns { 
     firstName   type:'text' 
     lastName   type:'text'   
     oAuthToken   type:'text' 
     secretKey   type:'text'   
     dobYear    type:'text' 
     dobMonth   type:'text' 
     dobDay    type:'text' 
     imgUrl    type:'text' 
     siteStandardAddress type:'text' 
    } 


} 
static constraints = { 
    firstName   (nullable:true) 
    lastName   (nullable:true)  
    oAuthToken   (nullable:false) 
    secretKey   (nullable:false) 
    dobYear    (nullable:true) 
    dobMonth   (nullable:true) 
    dobDay    (nullable:true)  
    id     (nullable:false) 
    imgUrl    (nullable:true) 
    siteStandardAddress (nullable:true) 
} 


def beforeInsert = { 
//to do: before insert, capture current email that is stored in the db 
} 

def afterInsert={ 
    //resave email 
} 

}

回答

2

的錯誤表示你在一個字符串調用save()。如果我們調查,我們看到你是。這是因爲你被分配

newProfile = new LinkedinProfile().id="${linkedinProfileFeed.id}".toString() 

等newProfile實際上是字符串linkedinProfileFeed.id,而不是new LinkedinProfile()如人們所期望的那樣。

比較

groovy> def foo = new Post().id="1" 
groovy> foo.class 

Result: class java.lang.String 

groovy> def foo = new Post(id: "1") 
groovy> foo.class 

Result: class test.Post 

你可能希望把id到構造函數的參數。無論如何,您需要newProfile以最終結果爲LinkedinProfile實例。然後你可以撥打save()就可以了。

此外,您可以在Groovy中使用點運算符。

+0

謝謝,就是這麼做的。因爲我用字符串結束了它,所以我無法訪問對象屬性。 – jason