We recently converted our EJB2.1 application to EJB3 (Jboss 4.2.CP07) and landed in to a problem with EntityExistsException Vs DuplicateKeyException (EJB2).
Earlier with EJB2 we were able to do operation like
try{
<EntityHome>.create(<some object>);
} catch (DuplicateKeyException ex) {
Do some other task ..involving database
}
When we converted to EJB3 ..the code looks like below
try{
em.persist(<some PO>);
} catch (EntityExistsException ex) {
Do some other task ..using em
}
In second case we learnt that we couldn't do any more operations on the em as the transaction is closed, is this the expected behavior?
If yes can anyone please suggest a different way to handle these scenarios ?
You could call findById first and only persist if it returns null. Exceptions are meant for a non-expected path. It sounds like you are expecting the row might be there.
I have this pattern a lot:
findById
if null: insert record
if not null: merge records