我对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;
}
我还尝试对@Transactional
和daoClass1
类使用daoClass2
注释,但它没有改变任何内容。
我做错了什么?