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()引发异常,则应该不应用所做的所有更改因为回滚。我是对的?