title: How to catch java.sql.SQLIntegrityConstraintViolationException?
body: <p>My application uses JPA+JavaDB and when I try to persist an object that violates a constraint I get <a href="http://docs.oracle.com/javase/7/docs/api/java/sql/SQLIntegrityConstraintViolationException.html" rel="noreferrer">SQLIntegrityConstraintViolationException</a> on console. </p>
  
  <p>That is OK but I can't catch that exception, why?</p>
  
  <hr>
  
  <p>This is a sample of my code where I would like to catch the exception. If I look at the <a href="http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#persist%28java.lang.Object%29" rel="noreferrer">documentation of persist()</a>, there is no sign of SQLIntegrityConstraintViolationException.</p>
  
  <pre><code>em.getTransaction().begin();
  em.persist(object);
  em.getTransaction().commit();
  </code></pre>
  
  <hr>
  
  <p>Part of the console stack trace:</p>
  
  <pre><code>[EL Warning]: 2013-09-15 16:38:57.571--UnitOfWork(459929151)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
  Internal Exception: java.sql.SQLIntegrityConstraintViolationException: A instrução foi interrompida, porque iria gerar um valor duplicado da chave em uma restrição de chave primária ou de unicidade identificada por 'SQL130819202336721' definida em 'CORRETORA'.
  Error Code: -1
  Call: UPDATE CORRETORA SET NOME = ? WHERE (ID = ?)
      bind =&gt; [2 parameters bound]
  Query: UpdateObjectQuery(Corretora[ id=7 ])
  javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
  Internal Exception: java.sql.SQLIntegrityConstraintViolationException: A instrução foi interrompida, porque iria gerar um valor duplicado da chave em uma restrição de chave primária ou de unicidade identificada por 'SQL130819202336721' definida em 'CORRETORA'.
  Error Code: -1
  Call: UPDATE CORRETORA SET NOME = ? WHERE (ID = ?)
      bind =&gt; [2 parameters bound]
  Query: UpdateObjectQuery(Corretora[ id=7 ])
      at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157)
      at br.meuspila.util.AbstractCrud.persist(AbstractCrud.java:50)
      at br.meuspila.corretora.CorretoraRN.persist(CorretoraRN.java:30)
      at br.meuspila.javafx.EditarCorretoraController$1.handle(EditarCorretoraController.java:66)
      at br.meuspila.javafx.EditarCorretoraController$1.handle(EditarCorretoraController.java:51)
  ...
  </code></pre>