Grails CXF插件Webservice

时间:2010-09-09 18:28:44

标签: web-services hibernate grails merge

我想知道在作为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将其识别为现有的人?

亲切的问候,

基督教

2 个答案:

答案 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()
}

我认为这是该方法的重点。