java - 异常没有被抓住

时间:2012-07-19 02:32:02

标签: java exception spring-roo

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

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

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

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

  3. 当用户尝试使用“Sean”更新第二个用户'Parker'时,我会遇到异常。
  4. 在堆栈跟踪中,我可以看到以下异常是原因

    1. 由ConstraintviolationException引起
    2. 由SQLException引起
    3. 由TransactionSystemException引起
    4. 由PersistenceException引起
    5. 由TransactionRollbackException引起
    6. 我尝试了以下操作

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

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

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

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

4 个答案:

答案 0 :(得分:2)

作为最后的手段,您可以抓住通用exception

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

通过它你会发现真正抛出了什么异常;