openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Teresa Kan (JIRA)" <j...@apache.org>
Subject [jira] Updated: (OPENJPA-370) LoadFetchGroup annotation was not recognized during the fetch1
Date Fri, 14 Sep 2007 19:18:32 GMT

     [ https://issues.apache.org/jira/browse/OPENJPA-370?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Teresa Kan updated OPENJPA-370:
-------------------------------

    Attachment: TestFetchGroup.zip

Attach the patch. See the following changes:
Index: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
===================================================================
--- openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
(revision 574344)
+++ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingFetchConfiguration.java
(working copy)
@@ -287,6 +287,9 @@
         }
     }
 
+    public void removeLoadFetchGroup(){
+        
+    }
     public Set getFields() {
         try {
             return _fetch.getFields();
Index: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java
===================================================================
--- openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java	(revision
574344)
+++ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfiguration.java	(working
copy)
@@ -192,7 +192,10 @@
     public FetchConfiguration clearFetchGroups();
 
     /**
-     * Resets the set of fetch groups to the list in the global configuration.
+     * Resets the set of fetch groups to the list in the global configuration. 
+     * The global configuration will be the default plus any fetch groups 
+     * that are added by the openjpa.FetchGroups property in the persistence.xml
+     * file.
      */
     public FetchConfiguration resetFetchGroups();
 
@@ -197,6 +200,11 @@
     public FetchConfiguration resetFetchGroups();
 
     /**
+     * Remove the loadFetchGroup if there is any loadFetchGroup.
+     */   
+    public void removeLoadFetchGroup();
+    
+    /**
      * Returns the set of fully-qualified field names that this component
      * will use when loading objects. Defaults to the empty set.  This set is
      * not thread safe.
Index: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java
===================================================================
--- openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java	(revision
575491)
+++ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/FetchConfigurationImpl.java	(working
copy)
@@ -92,6 +92,7 @@
     private boolean _load = true;
     private int _availableRecursion;
     private int _availableDepth;
+    private String _lfg = null;
 
     public FetchConfigurationImpl() {
         this(null);
@@ -287,7 +288,14 @@
                 getFetchGroupsList()));
         return this;
     }
+      
+    public void removeLoadFetchGroup() {
+        if (_lfg != null)
+            removeFetchGroup(_lfg);
+        _lfg = null;
+    }
 
+
     public Set getFields() {
         return (_state.fields == null) ? Collections.EMPTY_SET : _state.fields;
     }
@@ -568,8 +576,16 @@
             return true;
         String[] fgs = fmd.getCustomFetchGroups();
         for (int i = 0; i < fgs.length; i++)
-            if (hasFetchGroup(fgs[i]))
+            if (hasFetchGroup(fgs[i])) {
+                String fg = fmd.getLoadFetchGroup();
+                if (fg != null) {
+                    if (!hasFetchGroup(fg)) {
+                        addFetchGroup(fg);
+                        _lfg = fg;
+                    }
+                }
                 return true;
+            }
         return false; 
     }
 
@@ -576,7 +592,7 @@
     /**
      * Return the available recursion depth via the given field for the
      * given type.
-     *
+     * 
      * @param traverse whether we're traversing the field
      */
     private int getAvailableRecursionDepth(FieldMetaData fm, Class type, 
Index: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
===================================================================
--- openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java	(revision
575494)
+++ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java	(working
copy)
@@ -358,6 +358,10 @@
         // is loaded, etc
         int lockLevel = calculateLockLevel(active, forWrite, fetch);
         boolean ret = loadFields(fields, fetch, lockLevel, sdata, forWrite);
+        // call back to FetchConfiguration to clean up any loadFetchGroup.
+        // The loadFetchGroup was set by the FetchConfigurationImpl.includes()
+        // during the process of the getUnloadedInternal method. 
+        fetch.removeLoadFetchGroup();
         obtainLocks(active, forWrite, lockLevel, fetch, sdata);
         return ret;
     }
Index: openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
===================================================================
--- openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java	(revision 574693)
+++ openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java	(working copy)
@@ -710,6 +710,8 @@
     /**
      * The fetch group that is to be loaded when this receiver is loaded, or
      * null if none set.
+     * The LoadFetchGroup does not relate to the FetchGroup annotation. Therefore
+     * resets a fetch group will not remove this LoadFetchGroup.
      */
     public void setLoadFetchGroup (String lfg) {
         if ("".equals(lfg))


> LoadFetchGroup annotation was not recognized during the fetch1
> --------------------------------------------------------------
>
>                 Key: OPENJPA-370
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-370
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.1.0
>            Reporter: Teresa Kan
>         Attachments: TestFetchGroup.zip
>
>
> Employee class has a LoadFetchGroup annotation defined on the Rating field, when getRating
was called, the address should be returned also. However, openjpa did not handle the LoadFetchGroup
correctly, therefore, address was not eargly fetched.
> public class FGEmployee{
>     @Id
>     private int id;
>  
>     @OneToOne(fetch=FetchType.LAZY) 
>     private FGAddress address;
>  
>     @Basic(fetch=FetchType.LAZY)
>     @LoadFetchGroup("AddressFetchGroup")
>     private String rating;
>  
>     @ManyToOne(fetch=FetchType.LAZY)
>     private FGManager manager;
> ..
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message