Java 捕获意外回滚异常的原因
当运行下面的代码(这里的原因是唯一的约束错误)时,如何捕获Java 捕获意外回滚异常的原因,java,rollback,jta,Java,Rollback,Jta,当运行下面的代码(这里的原因是唯一的约束错误)时,如何捕获回滚异常的原因,我正在使用Weblogic,Spring,Hibernate,JTA <tx:annotation-driven transaction-manager="txManager" order="200" /> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> </bean
回滚异常的原因,我正在使用Weblogic
,Spring
,Hibernate
,JTA
<tx:annotation-driven transaction-manager="txManager" order="200" />
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
</bean>
@Service
public class OrderService extend BaseService<Order, Long> {
@Transactional
public Long save(Order modelEntity) {
try{
super.save(modelEntity);
}
catch(Exception exp){
....
}
}
}
------------------------------
@Controller
@RequestMapping("/test/core/Order")
public class OrderController extends BaseController{
@Autowired(required = true)
private IOrderService iOrderService;
@RequestMapping(value = "/save", method = RequestMethod.POST)
@ResponseBody
public Long save(@RequestBody Order modelEntity) {
return iOrderService.save(modelEntity);
}
}
@Controller
public class BaseController {
@ExceptionHandler(Exception.class)
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ResponseEntity<String> handleUncaughtException(Exception ex, WebRequest request, HttpServletResponse response) throws IOException {
String logMessage = ex.toString() + " " + ex.getMessage();
if (ex.getCause()!= null) {
logMessage += ex.getCause().toString() + " " + ex.getCause().getMessage();
}
return new ResponseEntity<String>(" ", responseHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
}
@服务
公共类OrderService扩展BaseService{
@交易的
公共长保存(订单模型实体){
试一试{
super.save(模型实体);
}
捕获(异常扩展){
....
}
}
}
------------------------------
@控制器
@请求映射(“/test/core/Order”)
公共类OrderController扩展了BaseController{
@自动连线(必需=真)
私人IOrderService IOrderService;
@RequestMapping(value=“/save”,method=RequestMethod.POST)
@应答器
公共长保存(@RequestBody Order modelEntity){
返回iOrderService.save(modelEntity);
}
}
@控制器
公共类基址控制器{
@ExceptionHandler(Exception.class)
@ResponseStatus(值=HttpStatus.INTERNAL\u SERVER\u错误)
@应答器
public ResponseEntity handleUncaughtException(异常ex、WebRequest请求、HttpServletResponse响应)引发IOException{
字符串logMessage=ex.toString()+“”+ex.getMessage();
如果(例如getCause()!=null){
logMessage+=ex.getCause().toString()+“”+ex.getCause().getMessage();
}
返回新的ResponseEntity(“,responseHeaders,HttpStatus.INTERNAL\u SERVER\u ERROR);
}
[错误]org.springframework.transaction.UnexpectedRollbackException:JTA事务意外回滚(可能由于超时);嵌套异常为weblogic.transaction.RollbackException:setRollbackOnly在事务JTA事务意外回滚时调用(可能由于超时);嵌套异常为weblogic.transaction.RollbackException:setRollbackOnly在transactionweblogic.transaction.RollbackException:setRollbackOnly在事务上调用setRollbackOnly在transactionorg.springframework.transaction.UnexpectedRollbackException:JTA事务意外回滚(可能是由于超时);嵌套异常为weblogic.transaction.RollbackException:setRollbackOnly在事务上调用
您是否尝试了try catch
?是的,但问题是当调用save方法时,hibernate在保存到数据库时返回唯一约束异常,但由于该方法是跨国的,因此发生了意外回滚异常。但我想捕获回滚异常的原因,即这里是唯一约束异常,以便在tr中捕获它y catch
@Transactional public Long Save(Order modelEntity){try{return super.Save(modelEntity);}和catch(uniqueconstraint异常)
出现了什么问题?