I am wondering about this question here at a tapestry mailing list?! But how about the following hints:
1. Catch your exceptions! void onActionFromUpdate1() { try { Usr usr = (Usr) session.get(Usr.class, new Long(2)); usr.setEmail("[EMAIL PROTECTED]"); // email already used by other user } catch (Exception ex) { setMyPageErrorMessage("Opps. I did it again."); } 2. Make sure to close your hibernate-connections properly (although hibernate does this for you in some modes) try { .... } catch { .... } finally { session.close(); statement.close(); connection.close(); } Grz Andi -----Ursprüngliche Nachricht----- Von: Angelo Chen [mailto:[EMAIL PROTECTED] Gesendet: Freitag, 7. März 2008 09:09 An: users@tapestry.apache.org Betreff: T5: proper handling of hibernate exception? I have a class where its email field has unique constraint, a page like this: @Inject private Session session; void onActionFromUpdate1() { Usr usr = (Usr) session.get(Usr.class, new Long(2)); usr.setEmail("[EMAIL PROTECTED]"); // email already used by other user } void onActionFromUpdate2() { Usr usr = (Usr) session.get(Usr.class, new Long(2)); usr.setEmail("[EMAIL PROTECTED]"); // email available } if I click update2, which change the email address to a non existing one, everything works. if I do following: click update 1, that will change email address to one already exists, naturally I got this: [WARN] JDBCExceptionReporter SQL Error: 1062, SQLState: 23000 [ERROR] JDBCExceptionReporter Duplicate entry '[EMAIL PROTECTED]' for key 2 [ERROR] AbstractFlushingEventListener Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update ... Caused by: java.sql.BatchUpdateException: Duplicate entry '[EMAIL PROTECTED]' for key 2 ... [WARN] PerthreadManager Error invoking listener [EMAIL PROTECTED]: Could not execute JDBC batch update org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update Click update 2, it will take a long time before the page got refreshed, error as follow: WARN] JDBCExceptionReporter SQL Error: 1205, SQLState: 41000 [ERROR] JDBCExceptionReporter Lock wait timeout exceeded; try restarting transaction [ERROR] AbstractFlushingEventListener Could not synchronize database state with session org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update ... Caused by: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1257) [WARN] PerthreadManager Error invoking listener [EMAIL PROTECTED]: Could not execute JDBC batch update org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update Caused by: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1257) Any way to fix this -- View this message in context: http://www.nabble.com/T5%3A-proper-handling-of-hibernate-exception--tp15891081p15891081.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]