IBM Support

PM14405: ISSUE ON @MANYTOONE(FETCH=FETCHTYPE.LAZY) IN JPA

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Issue in @ManyToOne(fetch=FetchType.LAZY).. getting the error
    below when related object is being lazily fetched.
    
    Result: Error 500: javax.servlet.ServletException:
    #{action.runTest}:
    <openjpa-1.2.2-SNAPSHOT-r422266:778978M-OPENJPA-975 nonfatal
    general error>
    org.apache.openjpa.persistence.PersistenceException: null
    
    :::::::::::::::::
    
    Caused by: <openjpa-1.2.2-SNAPSHOT-r422266:778978M-OPENJPA-975
    nonfatal
    general error>
    org.apache.openjpa.persistence.PersistenceException: null
     at
    org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:875)
     at
    org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:774)
     at
    org.apache.openjpa.jdbc.kernel.JDBCStoreManager.find(JDBCStoreMa
    nager.java:951)
     at
    org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.load(R
    elationFieldStrategy.java:609)
     at
    org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java
    :819)
     at
    org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreMa
    nager.java:688)
    

Local fix

  • Changed all the Fetchtype from lazy to eager. Result: No error
    was found.
    
    OR
    
    Seems that doing the setG1() and getG2() blocks of code in the
    same transaction is the problem.  If it's an option, you might
    want to break these up into more buttons and runTest would be
    broken into 2 methods:
    
        public void runTest1() {
         F1 f1 = entityManager.find(F1.class, new F1.Pk(0));
         G1 g1 = entityManager.find(G1.class, "test");
    
         if (f1 == null || g1 == null) throw new
    RuntimeException("click
    PrepareTestData first");
    
         f1.setG1(g1);
         entityManager.flush();
         entityManager.refresh(f1);
        }
    
        public void runTest2() {
         F1 f1 = entityManager.find(F1.class, new F1.Pk(0));
    
         if (f1 == null || g1 == null) throw new
    RuntimeException("click
    PrepareTestData first");
    
         G2 g2 = f1.getG2();
         System.out.println(g2);
        }
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED:  Users of IBM WebSphere Application          *
    *                  Server OpenJPA that use ManyToOne           *
    *                  incomplete relationships with Eager         *
    *                  Fetching                                    *
    ****************************************************************
    * PROBLEM DESCRIPTION: java.lang.IndexOutOfBoundsException     *
    *                      is thrown from within                   *
    *                      SQLBuffer.setParameters method.         *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    java.lang.IndexOutOfBoundsException is thrown from within
    SQLBuffer.setParameters method.  The user is using a ManyToOne
    annotation and incomplete relationships.
    

Problem conclusion

  • SelectExecutor.java and the classes that inherit from
    SelectExecutor need to add the hasMultipleSelect method and
    not pass parameters through the execute methods.
    JDBCStoreManager.java also needs to be simplified with the
    removal of one of the newSelect methods.
    
    The fix for this APAR is currently targeted for
    inclusion in fix pack 7.0.0.11.  Please refer to the
    Recommended Updates page for delivery information:
    http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
    

Temporary fix

Comments

APAR Information

  • APAR number

    PM14405

  • Reported component name

    JPA OSGI FEATUR

  • Reported component ID

    5724J0857

  • Reported release

    700

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2010-05-12

  • Closed date

    2010-05-12

  • Last modified date

    2010-06-08

  • APAR is sysrouted FROM one or more of the following:

    PM02494

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    JPA OSGI FEATUR

  • Fixed component ID

    5724J0857

Applicable component levels

  • R700 PSY

       UP

[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"1.0","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
29 September 2020