Używam EclipseLink w mojej aplikacji internetowej, a ja ciężko jest miło uchwycić i obsługiwać Wyjątki, które generuje. Widzę, że z podobnego problemu wydaje mi się this thread, ale nie widzę sposobu, aby go obejść lub naprawić.Jak wychwycić wyjątek naruszenia ograniczenia z EclipseLink?
Mój kod wygląda następująco:
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
}
}
Kiedy utrzymują() nazywa się podmiot, który narusza unikatowości, dostaję eksplozję wyjątkami, które zostały schwytane i rejestrowane przez kontener.
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)
Próbowałem następujące:
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);
}
Zdaję sobie sprawę, że za pomocą DataBaseException nie jest przenośny, ale trzeba od czegoś zacząć. Wyjątki nigdy nie zostaną złapane. Jakieś sugestie?
co to znaczy "DataBaseException nie jest przenośny"? Dzięki! –
@WeishiZeng Klasa DataBaseException jest zdefiniowana przez org.eclipse, a nie specyfikację JPA. Tak więc prawdopodobnie nie będzie działać (lub nawet skompilować) z innym dostawcą JPA. – AlanObject