This week's book giveaway is in the OO, Patterns, UML and Refactoring forum.
We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line!
See this thread for details.
The moose likes Object Relational Mapping and the fly likes JPA 2.0/EclipseLink how to access Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "JPA 2.0/EclipseLink how to access "internal exception" type?" Watch "JPA 2.0/EclipseLink how to access "internal exception" type?" New topic

JPA 2.0/EclipseLink how to access "internal exception" type?

Brendan Healey
Ranch Hand

Joined: May 12, 2009
Posts: 218

I've added a unique constraint to a table as follows:

My entity:

I then catch the exception in my EJB method create():


I then try to add "John Doe" twice, triggering a PersistenceException to be thrown by persist(). In my
server log I can see that there is an internal exception thrown MySQLIntegrityConstraintViolationException,
as you'd expect:

The problem is that I don't know how to access this internal level of detail about the exception, all I know
is that there is a PersistenceException, not that there's been a MySQLIntegrityConstraintViolationException.

At present my code handles an integrity constraint violation in exactly the same way as if I've forgotten
to start the database server, what I want to do is to separate out "soft" errors related to user input from
hard errors such as coding errors and major environmental problems.

If anyone knows how to achieve this I'll be eternally grateful.

Brendan Healey
Ranch Hand

Joined: May 12, 2009
Posts: 218

I can pretty much answer by own question now I think, the key point being that the exceptions are chained,
and you can navigate through the list to the root exception which is MySQLIntegrityConstraintViolationException.

And there you have it.

Matthew Toso

Joined: Oct 09, 2012
Posts: 1
I also had to get to the root MySQLIntegrityContraintViolationException. I like your concise for loop, however it needed a minor correction:

As you had it, the the variable t is always null when the for loop returns.
I agree. Here's the link:
subject: JPA 2.0/EclipseLink how to access "internal exception" type?
It's not a secret anymore!