我想知道在作为webservice请求接收请求时,处理现有实体(例如Person)的更新请求的最佳方法是什么。
在我的项目中,我有一个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以反映这一点。
那么......我如何让我收到的人“合并”到Hibernate会话中,以便Grails将其识别为现有的人?
亲切的问候,
基督教
答案 0 :(得分: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()
}
}
答案 1 :(得分:0)
不是100%肯定,但attach()有效吗?即
@WebResult(name = "person")
@WebMethod(operationName = "update")
Person update(@WebParam(name="person")Person person) {
println "Updating $person"
person.attach();
return person.save()
}
我认为这是该方法的重点。