在將域對象保存在服務中時,在保存域時使用flush: true
,在必須使用該對象之前,對象不會保存。是否可以強制刷新保存在服務中的域名?
Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
我不確定如何在我正在使用的服務中強制刷新休眠會話。
對於某些上下文,我正在對API服務進行API調用,該API服務會轉到另一個服務,我將其保存到域,然後返回到API服務,然後將字符串添加到RabbitMQ隊列中,然後返回200OK給用戶。但是,因爲該域沒有在第二個服務中保存,所以當該項目被添加到隊列中時,rabbitMQ正在處理消息,之後域被保存。
編輯:
我目前的解決辦法:
API控制器:
def apiActionCreate()
{
Map returnMap = apiService.createAction(params, request)
rabbitSend staticQueue, [id: returnMap.id.toString()]
}
API服務:
Map someAction(UUID id)
{
Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
}
:
Map createAction(GrailsParameterMap params, HttpServletRequest request)
{
//do some logic related to a related domain
seperateService.someAction(domain.id)
}
在那裏我節省了域名服務
也許是因爲[尚未提交]交易? –
以上就是爲什麼這個實例還不存在。域實例上的'flush:true'提示就是這樣。提示Hibernate將任何掛起的SQL刷新到數據庫。但是,根據您的事務隔離級別,這些更改可能對其他線程或Hibernate會話不可見。你可以考慮設置一個限制較少的隔離級別,但是它有缺陷或髒讀取的缺點(取決於你選擇的隔離級別)。 –
嗯.. @JoshuaMoore考慮到這一點,從控制器到API服務,然後是我需要的任何東西,然後回到控制器,會更容易嗎?對於類似這樣的問題,我的經驗是,當您從服務返回到控制器時,保存在該服務中的信息會持久保存到數據庫中。 –