【发布时间】:2014-03-03 20:26:58
【问题描述】:
我正在开发一个导入模块以从 excel 文件中批量加载。我使用 spring 来管理事务上下文和 spring-data-jpa 之类的 DAO,来读取我正在使用 POI 的 excel 文件。
@Service
public class ImportService{
@Autowired
UserRepository userRepository;
@Autowired
UserDetailRepository userDetailRepository;
@Autowired
AddressRepository addressRepository;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Map<String,StringBuffer> import(byte[] bytesUploaded) {
wb = new XSSFWorkbook(new ByteArrayInputStream(bytesUploaded));
XSSFSheet mySheet = (XSSFSheet) wb.getSheetAt((short)0);
for(Row row: mySheet){
if(row.getRowNum() >= 2 ){
readRowFromExcel(row);
}
}
}
@Transactional(propagation = Propagation.NESTED,rollbackFor=Exception.class)
private void readRowFromExcel(Row row) {
try{
User user = readUserFromFile(row);
UserDetail = readUserDetailFromFile(row,user);
Address address = readAddressFromFile(row,user);
//A few check to verify the corretly load of the entities
userDetailRepository.save(userDetail);
addressRepository.save(address);
userRepository.save(user);
}
catch (Exception e){
//Do something
}
}
}
我希望如果在读取或保存行期间发生异常,则不会持久化,但是内部异常不能导致外部事务回滚。
我该如何处理这种情况? 我是否正确面对问题? 你能给我一些建议吗(我是春天的新手)?
谢谢
【问题讨论】:
-
stackoverflow.com/questions/7872773/…异常需要让控制流离开方法。
标签: java spring jpa spring-data-jpa