0

在服务中保存域对象时,flush: true在保存域时,在我必须使用该对象之前,该对象没有得到保存。

Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)

我不确定如何在我正在使用的任一服务中强制刷新休眠会话。

在某些情况下,我正在对 API 服务进行 API 调用,该服务转到另一个服务,我在其中保存域,然后返回 API 服务,然后将字符串添加到 RabbitMQ 队列,然后向用户返回 200OK . 但是因为域没有被保存在第二个服务中,所以当项目被添加到队列中时,rabbitMQ 在域被保存之前处理消息。

编辑:

我目前的修复:

API控制器:

def apiActionCreate()
{
   Map returnMap = apiService.createAction(params, request)
   rabbitSend staticQueue, [id: returnMap.id.toString()]
}

API服务:

Map createAction(GrailsParameterMap params, HttpServletRequest request)
{
   //do some logic related to a related domain
   seperateService.someAction(domain.id)
}

我保存域的服务:

Map someAction(UUID id)
{
   Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
}
4

1 回答 1

0

您可以创建一个在完成后将持续到 DDBB 的事务。

MyDomain.withTransaction{
        somecode()
}
于 2015-11-25T22:43:01.473 回答