[
https://issues.apache.org/jira/browse/OPENJPA-576?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sandeep Shrivastava updated OPENJPA-576:
----------------------------------------
Attachment: OPENJPA-576-v2.patch
Further refinement of the patch based on feedback from Abe White.
> Recursively embedded entities generate an extra and reduntant SQL call to the
> database.
> ---------------------------------------------------------------------------------------
>
> Key: OPENJPA-576
> URL: https://issues.apache.org/jira/browse/OPENJPA-576
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc
> Environment: OpenJPA 1.1.0-SNAPSHOT
> version id: openjpa-1.1.0-SNAPSHOT-r422266:647033
> Apache svn revision: 422266:647033
> os.name: Windows XP
> os.version: 5.1
> os.arch: x86
> java.version: 1.6.0_05
> java.vendor: BEA Systems, Inc.
> Reporter: Sandeep Shrivastava
> Fix For: 1.1.0
>
> Attachments: OPENJPA-576-v2.patch, OPENJPA-576-v2.patch,
> OPENJPA-576.patch
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> Consider the following persistent class model. The accessor methods are
> removed for the sake of brevity.
> public class EmbeddedOwnerPC {
> private int id1;
> private int id2;
> private String stringField;
> private EmbeddedPC embedded;
> private ComplexEmbeddedPC complexEmbedded;
> }
> public class EmbeddedPC {
> private int intField;
> private String stringField;
> }
> public class ComplexEmbeddedPC extends RecursivelyEmbeddedPC {
> private String stringField;
> private EmbeddedOwnerPC ownerField;
> private Set stringSet = new HashSet();
> }
> public class RecursivelyEmbeddedPC {
> private EmbeddedPC embedded;
> }
> When trying to retrieve the EmbeddedOwner entity with a given fetch plan that
> includes the complexEmbedded and the embedded fields in the
> RecursivelyEmbeddedPC class it generate the following 2 SQL statements to
> load the entity.
> SELECT t0.TYP, t0.VERSN, t0.EMBEDDED_NULL, t0.ID1, t0.ID2, t0.INTFIELD1,
> t0.STRINGFIELD3, t0.STRINGFIELD FROM EMBEDDEDOWNERPC t0 WHERE t0.ID1 = ? AND
> t0.ID2 = ? FOR UPDATE
> SELECT t0.ID1, t0.ID2 FROM EMBEDDEDOWNERPC t0 WHERE t0.ID1 = ? AND t0.ID2 = ?
> FOR UPDATE
> The second call is reduntant and not needed. The fix is to the
> EmbedFieldStrategy class load method to ensure that all fields that are
> required to be loaded as per the fetch plan and included from the result set
> and ONLY when this is not true then generate the extra call otherwise return
> a hollow embedded entity. In the above test case the extra call was generated
> to get the stringSet field which was not specified in the fetch plan but the
> call is made out nevertheless which just selects the primary keys with the
> same where clause.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.