当前位置: 首页 > 知识库问答 >
问题:

ejb jta nullpointer异常未回滚

陶锋
2023-03-14
public void persist(Customer customer,Child child){  
try{  
   em.persist(customer); 
   Father father = new Father();
   father.setChild(child); here child is null 
   em.persist(father);
   }catch(Exception e){  

   }    
}  

当异常(NullPointerException)发生时,事务不回滚,并且Customer实体被持久化,但是当我用

   public void persist(Customer customer,Child child){  
   try{  
    em.persist(customer); 
    Father father = new Father();
    father.setChild(child); here child is null 
    em.persist(father);
   }catch(EJBException e){  

   }    
} 

事务正在回滚,但我不明白为什么,NullPointerException扩展了RuntimeException,文档说RuntimeException导致回滚。

共有1个答案

宋唯
2023-03-14

在第二个示例中,没有捕获NullPointerException,而是捕获了一个EJBException,它是其他运行时异常类。

正如您所说,当容器截获NullPointerException时,事务被标记为回滚。

第一个示例捕获Exception,wich是一个基类(Java异常是分层的),因此,捕获Exception的任何子类,如NullPointerEJBException。在这种情况下,容器不将事务标记为回滚。

 类似资料:
  • 因为Java编程语言不需要捕获方法或声明未检查异常(包括 RuntimeException、Error及其子类),程序员可能会试图编写只抛出未检查异常的代码,或使所有异常子类继承自RuntimeException。这两个快捷方式都允许程序员编写代码,而不必担心编译器错误,也不用担心声明或捕获任何异常。虽然这对于程序员似乎很方便,但它避开了捕获或者声明异常的需求,并且可能会导致其他人在使用您的类而产

  • 问题是即使抛出了未检查的异常,methodC()也不会回滚。

  • 问题内容: 我发现以下行为至少 很奇怪 : 在子句中使用时,该异常消失。那是个错误吗?那在任何地方都有记录吗? 但是真正的问题(我将标记为正确的答案)是: python开发人员允许这种奇怪行为的原因是什么? 问题答案: 您询问了有关Python开发人员的推理。我不能为他们说话,但是没有其他行为可以理解。函数可以返回值,也可以引发异常。它不能同时做到。“最终”子句的目的是提供“保证”运行的清除代码,

  • 问题内容: 我正在尝试向表中插入一些行…我正在使用 postgressql-7.2.jar。 我得到以下异常 org.postgresql.util.PSQLException:查询未返回任何结果。 在org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255) 我已经用Googl

  • 我在tomcat服务器中使用具有多个数据源配置的JTA原子事务。有时我会遇到以下异常: JTA事务意外回滚(可能是由于超时);嵌套的异常是javax。交易回滚异常:事务被设置为仅回滚 出现这种异常的原因是什么?

  • 在将其标记为副本之前,请阅读问题。 我在我的谷歌控制台中设置了SHA1和SHA256。 我已经尝试了很多方法,但仍然面临错误。 未处理的异常: 平台异常(sign_in_failed, 还尝试了Flutter和google_sign_in插件:PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiExceptio