0
我有一個grails(2.5.2)應用程序,有一個mysql和一個NoSQL交互。有調用2種方法爲主/主要服務方法:爲什麼在這種情況下Grails/Spring事務行爲不起作用?
class mainService {
static transactional = false
NoSQLDataAccessService noSQLDataAccessService
// main/principal method
@Transactional
void save(json){
// (1) creating domain entities from json
addNewDomainEntities(entities)
// (2)
noSQLDataAccessService.set(json)
}
@Transactional
void addNewDomainEntities(entities){
// save the entities in a mysql schema and use save(flush:true)
// because i need the generated id's
}
}
正如你可以看到,這個mainService創造了新的領域實體(1),沖洗會議獲得的ID。然後,我打電話了JSON存儲在NoSQL的架構等服務方法(2):
class NoSQLDataAccessService(){
static transactional = false
void set(json){
try{
// save the json in a NoSQL schema
} catch(Exception ex){
// if fails, i log the exception and throws it again
throws ex
}
}
}
但是,有時noSQLDataAccessService.set()失敗的外部原因之前仍會創建實體堅持在mysql db。(這是問題)
包含所有此程序執行的save方法標記爲@Transactional,因此如果noSQLDataAccessService.set()引發異常,則應該不應用所做的所有更改因爲回滾。我是對的?