2012-07-19 147 views
3

我正在使用Spring ROO。 在我的web应用程序中,我可以创建许多用户并保存。 我也可以更新现有的用户。java - 异常未被捕获

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

  1. 用户创建了一个用户名“肖恩”与手机号码“6039274849”

  2. 用户创建一个名为“帕克”与手机号码“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个例外“????” 。但我不能赶上。

任何人都可以请告诉我需要在'????'中添加哪个异常从上面的列表中发现异常?

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

+0

我试着添加'Exception'来代替'????'它运行良好。但我不想使用'Exception e'。我想知道具体的例外情况。 – user1514499 2012-07-19 02:33:55

+0

然后在你的catch块中找出'System.out.printn(e)'来找出哪个特定的异常被抛出,它应该是这样的:'java.lang.NullPointerException' – John 2012-07-19 02:49:07

+0

是否有任何理由为什么你不能做一个尝试和多个catch语句? – 2012-07-19 06:32:38

回答

1

嗯,难道你不是在重新抛出异常吗?它应该是跟踪中的“最近期”异常,所以ConstraintValidationException

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

+0

我只是想重新抛出,因为我想向用户显示错误页面(带有相关的错误信息)。 – user1514499 2012-07-19 02:42:45

+0

那么为什么赶上它呢? – hvgotcodes 2012-07-19 02:44:21

2

作为最后的手段,你可以赶上多用途exception

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

在Spring-Roo中,抛出所有异常并将其转发到在web-mvc-config.xml和web.xml中配置的错误页面。所以我必须抛出异常。 – user1514499 2012-07-19 02:41:11

+0

好的,消除了那一点。 – SomeKittens 2012-07-19 02:43:12

1

疑问时我尝试捕捉可抛出,要么添加断点或登录出来,看看它到底是什么。然后更改代码accrodingly。

1

最近我有同样的probelem。它似乎在它自己的异常类中包装异常。
我解决了这个问题:

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

与你会发现什么异常被抛出真的;