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:
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