Spring Transactional不会回滚

时间:2016-05-26 15:47:52

标签: java spring spring-transactions

我对Spring的xml-free配置有疑问。不幸的是,即使我使用@Transactional注释标记相应的方法,它也不会回滚我的数据库更改。

首先,我有一个控制器,它调用标有@Transactional的类。

@RequestMapping(value="/Device", method=RequestMethod.POST, produces={"application/json"})
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody List<Device> addDevice(
        @RequestBody Device deviceToAdd) {      

    List<Device> devices= deviceManager.addDevice(deviceToAdd);
    return devices;
}

所有控制器都有一个捕获DuplicateKeyException的ExceptionResolver:

@ExceptionHandler(DuplicateKeyException.class)      
public ResponseEntity<Result> handleBindException(DuplicateKeyException e) {
    log.error(e.getMessage(), e);
    Result result = new Result("this object already exists");       
    return new Response(result);
}

这是我的主要事务类,它调用两个DAO类。第二个导致DuplicateKeyException,但第一个的结果不会从DB中删除。

@Transactional(propagation = Propagation.REQUIRED, rollbackFor=Exception.class)
public class DeviceManager {

@Autowired
DaoClass1 daoClass1;

@Autowired
DaoClass2 daoClass2;    

public List<Device> addDevice(Device device){       

    Pocket pocket = daoClass1.addPocket(new Pocket());<--is not rolled back after Exception
    device.setPocket(pocket);

    List<Devices> addedDevices = daoClass2.addDevice(device); <--- causes exception
    return devices;
}

我还尝试对@TransactionaldaoClass1类使用daoClass2注释,但它没有改变任何内容。

我做错了什么?

0 个答案:

没有答案