[
https://issues.apache.org/jira/browse/OPENJPA-119?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kevin Sutter closed OPENJPA-119.
--------------------------------
> EntityManager.clear() should not implicitly invoke the flush operation
> ----------------------------------------------------------------------
>
> Key: OPENJPA-119
> URL: https://issues.apache.org/jira/browse/OPENJPA-119
> Project: OpenJPA
> Issue Type: Bug
> Components: jpa
> Reporter: Kevin Sutter
> Assignee: Kevin Sutter
> Fix For: 0.9.7
>
>
> From the dev mailing list...
> =======================================
> We've noticed that when EntityManager.clear() is invoked, an implicit flush()
> is performed. Although the spec is cloudy in this area, I don't think this
> processing is correct. The javadoc is as follows for clear():
> /**
> * Clear the persistence context, causing all managed
> * entities to become detached. Changes made to entities that
> * have not been flushed to the database will not be
> * persisted.
> */
> public void clear();
> This indicates that Entities that have not been flushed will not be
> persisted. Thus, I would say this implies that we should not be doing an
> implicit flush. If the application wanted their Entities to be flushed before
> the clear, then they can call the flush() method before calling clear(). We
> shouldn't be doing this for them because then they have no choice.
> The Pro EJB3 Java Persistence API book has similar wording on pages 138-139:
> "..In many respects [clear] is semantically equivalent to a transaction
> rollback. All entity instances managed by the persistence context become
> detached with their state left exactly as it was when the clear() operation
> was invoked..."
> Our current processing for clear() eventually gets to this code:
> public void detachAll(OpCallbacks call) {
> beginOperation(true);
> try {
> if ((_flags & FLAG_FLUSH_REQUIRED) != 0)
> flush();
> detachAllInternal(call);
> } catch (OpenJPAException ke) {
> throw ke;
> } catch (RuntimeException re) {
> throw new GeneralException(re);
> } finally {
> endOperation();
> }
> }
> Basically, if we have dirtied the Persistence Context, then do a flush()
> followed by the detachAllInternal(). I don't think the clear() should be
> doing this flush() operation. Any disagreement?
> =======================================
> There was no disagreement, thus this JIRA issue.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.