我的应用程序使用 JPA+JavaDB,当我尝试保留违反约束的对象时,我得到SQLIntegrityConstraintViolationException http://docs.oracle.com/javase/7/docs/api/java/sql/SQLIntegrityConstraintViolationException.html在控制台上。
没关系,但我无法捕获该异常,为什么?
这是我的代码示例,我想在其中捕获异常。如果我看一下persist() 的文档 http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#persist%28java.lang.Object%29,没有 SQLIntegrityConstraintViolationException 的迹象。
em.getTransaction().begin();
em.persist(object);
em.getTransaction().commit();
控制台堆栈跟踪的一部分:
[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 => [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 => [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)
...
日志告诉你原因。这SQLIntegrityConstraintViolationException
被包裹在一个org.eclipse.persistence.exceptions.DatabaseException
。您可以捕获此异常并执行一些操作SQLIntegrityConstraintViolationException
不知道你的代码,不可能告诉你在哪里改变它,但如果你想真正抓住SQLIntegrityConstraintViolationException
,您必须在它被包含在另一个异常中之前这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)