java-未捕获异常

java-未捕获异常,java,exception,spring-roo,Java,Exception,Spring Roo,我正在使用SpringRoo。 在我的web应用程序中,我可以创建许多用户并保存它们。 我还可以更新现有用户 对于更新场景,我们使用merge()方法更新现有数据。在数据库中,“用户名”列是唯一的。以下是场景 用户创建了一个手机号码为“6039274849”的用户名“Sean” 用户创建另一个名为“Parker”的用户,手机号码为“8094563454” 当用户试图用“Sean”更新第二个用户“Parker”时,我遇到了异常 在stacktrace中,我可以看到以下异常是原因 由Constrai

我正在使用SpringRoo。 在我的web应用程序中,我可以创建许多用户并保存它们。 我还可以更新现有用户

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

  • 用户创建了一个手机号码为“6039274849”的用户名“Sean”

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

  • 当用户试图用“Sean”更新第二个用户“Parker”时,我遇到了异常
  • 在stacktrace中,我可以看到以下异常是原因

  • 由ConstraintviolationException引起
  • 由SQLException引起
  • 由TransactionSystemException引起
  • 由PersistenceException引起
  • 由TransactionRollbackException引起
  • 我尝试了以下方法

    public String merge()
      {
         try{
              //code to merge
            }
         catch(????? e){
             throw e;
         }
      }
    
    我试图在“??”中添加上述5个例外。但我还是抓不住

    有人能告诉我需要在“??”中添加哪个异常来捕获上面列表中的异常吗


    我用的是SpringRoo。所以我正在修改.aj文件中的代码。请不要重复回答这个问题。在结束这个问题之前,我期待着任何人对我的问题给出答案。

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


    请注意,通常在Spring/Hibernate应用程序中,代码中冒出的异常会导致事务回滚。如果捕获到异常,您可能会阻止异常,这可能会导致数据不一致。

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


    当有疑问时,我会尝试捕捉一个可丢弃的东西,或者添加断点,或者将其注销,以查看它到底是什么。然后相应地更改代码。

    我最近也遇到了同样的问题。似乎spring wrap异常在它自己的异常类中。
    我用以下方法解决了这个问题:

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

    这样,您将发现真正抛出了什么异常

    我试着用“例外”代替“例外”,效果很好。但是我不想用“Exception e”来捕捉。我想捕获特定的异常。然后在catch块中执行
    System.out.printn(e)
    以确定抛出的是哪个特定异常,它应该说:
    java.lang.NullPointerException
    有什么原因不能执行一次尝试和多次catch语句吗?在Spring Roo中,所有异常都被抛出并转发到web-mvc-config.xml和web.xml中配置的错误页面。所以我必须抛出异常。我只想重新抛出,因为我想向用户显示错误页面(带有相关错误消息)。那么为什么要首先捕获它呢?
    try {
       ...
    }
    catch(Exception e){
      System.out.println(e.getClass().getName());
    }