2010-09-09 140 views
1

我想知道當接收到請求作爲web服務請求時,處理現有實體(例如Person)更新請求的最佳方式是什麼。Grails CXF插件Webservice

在我的項目中我有一個Person域類,我想通過CXF插件將CRUD操作公開爲webservice操作。所以我做一個PersonService,並與

static expose = ['cxfjax'] 

然後我有更新的方法公開的方法:

@WebResult(name = "person") 
@WebMethod(operationName = "update") 
Person update(@WebParam(name="person")Person person) { 
    println "Updating $person" 
    return person.save() 
} 

在服務,我得到了一個精美Person對象,但即使它有一個id一個現有的人,一個新的人被創建,並且id被改變以反映這個。

SO ...我如何讓我收到的人「合併」到Hibernate會話中,以便Grails將它識別爲現有的人?

親切的問候,

基督教

回答

0

也許......

@WebResult(name = "person") 
@WebMethod(operationName = "update") 
Person update(@WebParam(name="person")Person person) { 

    println "Updating $person" 
    def p = Person.get(person.id) 
    if (p) { 
    // what ever your merge logic is... 
    } else { 
    return person.save() 
    } 
} 
+0

我希望能以某種方式根據ID重新將傳入的Person附加到Hibernate會話中。現在,我實際上在做你喜歡的建議:Person p = new Person(); p.properties = incomingPerson.properties; p.save(); – 2010-09-10 04:22:46

+0

它是如此工作? – 2010-09-10 04:40:24

0

不是100%肯定,但確實attach()工作?即

@WebResult(name = "person") 
@WebMethod(operationName = "update") 
Person update(@WebParam(name="person")Person person) { 
    println "Updating $person" 
    person.attach(); 
    return person.save() 
} 

我認爲這是該方法的要點。