Adam Hardy on 01/05/08 17:48, wrote:
Adam Hardy on 30/04/08 21:22, wrote:
If I am running JPA in extended persistence context, when I call EntityManager.merge() within a transaction and then commit the transaction, should it or shouldn't it execute the SQL?

I assumed that it would but I have a situation where it won't unless I call EntityManager.flush() before committing the transaction.

I'd really appreciate an answer on this one from anyone - I find the documentation either too obtuse or too scant to get myself a firm enough understanding of the situation I'm tackling at the moment.

Maybe it would be simpler if I just explained what I was doing:

I'm running JPA with an extended persistence context in a webapp, using the OpenEntityManagerInView filter to open the entity manager at the start of a request and to close it after the JSPs have finished.

I use Spring TransactionManager to wrap my persists, merges and removes.

In this current situation, I put bad data into an entity and try to display the real exception - at the moment I only see a stacktrace in the browser relating to a secondary exception sparked by after-effects of the first.

I would like the TransactionManager to cause a commit when it unbinds from the EntityManager.

If I put a flush() into the code after the JPA operation, it tries to commit and throws an exception, but it also scrubs my entity from the EntityManager and then my JSPs can't do any lazy loading to display the data again (and give the user a second chance to enter correct data).

So what am I doing wrong? Have I mis-configured the Spring TransactionManager somehow? Is there a JPA setting I should be using? Should I be doing something completely different?

Reply via email to