Estoy usando EclipseLink en mi aplicación web, y estoy teniendo dificultades para atrapar y manejar Excepciones que genera. Veo desde this thread lo que parece ser un problema similar, pero no veo cómo solucionarlo o solucionarlo.¿Cómo atrapo la excepción de violación de restricción de EclipseLink?
Mi código es el siguiente:
public void persist(Category category) {
try {
utx.begin();
em.persist(category);
utx.commit();
} catch (RollbackException ex) {
// Log something
} catch (HeuristicMixedException ex) {
// Log something
} catch (HeuristicRollbackException ex) {
// Log something
} catch (SecurityException ex) {
// Log something
} catch (IllegalStateException ex) {
// Log something
} catch (NotSupportedException ex) {
// Log something
} catch (SystemException ex) {
// Log something
}
}
Cuando persisten() se llama con una entidad que viola una restricción de unicidad, consigo una explosión de excepciones que son capturados y registrados por el contenedor.
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: The statement
was aborted because it would have caused a duplicate key value in a unique or
primary key constraint or unique index identified by 'SQL110911125638570'
defined on 'CATEGORY'.
Error Code: -1
(etc)
he intentado lo siguiente:
try {
cc.persist(newCategory);
} catch (PersistenceException eee) {
// Never gets here
System.out.println("MaintCategory.doNewCateogry(): caught: " + eee);
} catch (DatabaseException dbe) {
// Never gets here neither
System.out.println("MaintCategory.doNewCateogry(): caught: " + dbe);
}
que se dan cuenta de que el uso de DatabaseException no es portátil, pero tengo que empezar en alguna parte. Las excepciones nunca son atrapadas. ¿Alguna sugerencia?
¿Qué significa "DataBaseException is not portable"? ¡Gracias! –
@WeishiZeng La clase DataBaseException está definida por org.eclipse, no por la especificación JPA. Entonces esto probablemente no funcionaría (o incluso compilaría) con otro proveedor de JPA. – AlanObject