[
https://issues.apache.org/jira/browse/OPENJPA-968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Donald Woods updated OPENJPA-968:
---------------------------------
Affects Version/s: (was: 2.0.0)
2.0.0-M2
Fix Version/s: (was: 2.0.0-M4)
(was: 2.0.0)
> Change in default detach() behavior for JPA 2.0
> -----------------------------------------------
>
> Key: OPENJPA-968
> URL: https://issues.apache.org/jira/browse/OPENJPA-968
> Project: OpenJPA
> Issue Type: Improvement
> Components: kernel
> Affects Versions: 2.0.0-M2
> Reporter: Pinaki Poddar
> Assignee: Pinaki Poddar
> Fix For: 2.0.0-M3
>
> Attachments: problemPatch.txt
>
>
> JPA 2.0 specification has introduced a detach() method in EntityManager.
> OpenJPA already has a detach() method prior to JPA 2.0. There are several
> major differences between the new method introduced in JPA 2.0 spec versus
> existing OpenJPA detach method.
> 1. The method signatures are different
> JPA 2.0: void detach(Object entity);
> OpenJPA 1.x : <T> T detach(T entity);
> 2. This signature difference also points to a basic difference in behavior.
> OpenJPA detach() creates a copy of the given input entity and returns it.
> While JPA 2.0 specifies in-place detach and hence returns a void.
> 3. The other basic difference is OpenJPA detach does not remove the input
> entity from the persistence context. While JPA 2.0 specifies that the input
> entity be removed from the context.
> 4. OpenJPA detach flushes a dirty instance before detaching. This implicit
> flush behavior can be configured but flushing is the default.
> 5. OpenJPA detach() provides several options on which related instances will
> become detached. They are 'loaded', 'fetch-group' and 'all'. With 'loaded'
> being the default.
> Whereas JPA 2.0 introduces a DEATCH cascade type and specified that the
> relationships that are cascaded with DETACH or ALL be traversed during
> detachment.
> It is not clear from the spec, however,
> a) whether an unloaded relation which has DETACH cascade will get loaded
> as a side-effect of detach().
> b) whether a relation that is currently loaded but not cascaded for DETACH
> will be included in the detached graph.
> If answer to (a) is no and answer to (b) is yes, (which the spec does
> seems to suggest) then we can effectively continue with 'loaded' as the
> default behavior.
> To accommodate these differences following actions are proposed:
> A1. Request JPA Spec committee to change the API method in JPA 2.0 to OpenJPA
> detach() method signature. If that request is not met, then change OpenJPA
> API according to JPA 2.0 spec. It will break backward compatibility of
> OpenJPAEntityManager API. There seems to be no way out.
> A2. The default behavior will change in the following way
> a) the detach will be in-place
> b) no implict flush of dirty instances
> c) based on condition, how JPA 2.0 spec clarifies the DETACH
> cascade and loaded fields for inclusion in the detached graph, change
> 'loaded' default to 'cascade' default.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.