繁体   English   中英

java - 异常没有被抓住

[英]java - Exception not getting caught

我正在使用Spring ROO。 在我的Web应用程序中,我可以创建许多用户并保存。 我也可以更新现有用户。

对于更新方案,我们使用merge()方法来更新现有数据。 在数据库中,“用户名”列是唯一的。 以下是该方案。

  1. 用户使用手机号码“6039274849”创建用户名“Sean”

  2. 用户创建另一个名为“Parker”的用户,手机号码为“8094563454”

  3. 当用户尝试用'Sean'更新第二个用户'Parker'时,我会遇到异常。

在堆栈跟踪中,我可以看到以下异常是原因

  1. 由ConstraintviolationException引起
  2. 由SQLException引起
  3. 由TransactionSystemException引起
  4. 由PersistenceException引起
  5. 由TransactionRollbackException引起的

我尝试了以下操作

public String merge()
  {
     try{
          //code to merge
        }
     catch(????? e){
         throw e;
     }
  }

我试图在'????'中添加上述5个例外 但我无法抓住。

任何人都可以告诉我需要添加哪个例外'????' 从上面的列表中捕获异常?

PS:我正在使用Spring ROO。 所以我在更改.aj文件中的代码。 请不要将此问题视为重复。 在结束这个问题之前,我期待任何人回答我的问题。

作为最后的手段,您可以捕获通用exception

public String merge()
{
     try{
          //code to merge
        }
     catch(Exception e){
         //handle e here.
     }
}

嗯,你不是只是在你的捕获中重新抛出异常吗? 它应该是跟踪中的“最新”异常,因此ConstraintValidationException

请注意,通常在Spring / Hibernate应用程序中,冒出代码的异常是导致事务回滚的原因。 如果您发现异常,您可能会阻止这种情况,这可能会导致数据不一致。

如果有疑问,我会尝试捕捉一个Throwable并添加断点或注销它以确切地看到它是什么。 然后累积更改代码。

我最近有同样的问题。 它似乎是自己的异常类中的spring换行异常。
我解决了这个问题:

try {
   ...
}
catch(Exception e){
  System.out.println(e.getClass().getName());
}

有了它,你会发现什么异常被抛出;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM