I find I need to cast my resultlist but your error doesn't suggest that is the issue but anyway :
List<Corporation> result = (List<Corporation>)query.getResultList(); -----Original Message----- From: Zhanming Qi [mailto:[email protected]] Sent: Monday, 31 May 2010 11:10 PM To: [email protected] Subject: openjpa-2.0 how join fetch work? Hi, I have two Entity, Corporation and Division, a simple one to many relation. @Test public void testQueryFetchJoins(){ EntityManager em = entityManagerProvider.get(); Query query = em.createQuery( "SELECT c " + " FROM Corporation c JOIN FETCH c.divisions " + " WHERE c.name = '" + CORP_A_NAME + "'"); List<Corporation> result = query.getResultList(); for (Corporation corporation : result ){ System.out.println(corporation.getName()); } em.clear(); } I test this method, and it print the right SQL Script on console. but the test does not pass. This is the failure trace: <openjpa-2.0.0-r422266:935683 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null FailedObject: SELECT c FROM Corporation c JOIN FETCH c.divisions WHERE c.name = 'Corporation A' [java.lang.String] at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:986) at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:885) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1 050) at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280) at org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:234 4) at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274) at org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject( InstanceResultObjectProvider.java:59) at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36) at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1246) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:861) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:792) at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542) at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:288) at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302) at com.qizm.tutorial.jpa.model.CorporationTest.testQueryFetchJoins(CorporationT est.java:210) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod. java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.j ava:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.ja va:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.jav a:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunne r.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.jav a:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.jav a:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRef erence.java:46) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3 8) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner .java:197) Caused by: java.lang.NullPointerException at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStore Manager.java:489) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreMan ager.java:449) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager. java:342) at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreM anager.java:112) at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57 ) at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1005) at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:963) ... 38 more Here is the openjpa.Log 1672 aUnit TRACE [main] openjpa.jdbc.SQL - <t 24512621, conn 2310757> executing prepstmnt 28730188 SELECT t0.ID, t0.version, t0.CORPORATION_NAME, t1.CORPORATION_ID, t1.ID, t1.version, t1.CITY, t1.STATE, t1.STREET, t1.ZIP_CODE, t1.mumber, t1.name FROM CORPORATION t0 INNER JOIN DIVISION t1 ON t0.ID = t1.CORPORATION_ID WHERE (t0.CORPORATION_NAME = ?) [params=(String) Corporation A] This SQL is right, but how did I can not pass this:List<Corporation> result = query.getResultList(); Thanks. Zhanming -- View this message in context: http://openjpa.208410.n2.nabble.com/openjpa-2-0-how-join-fetch-work-tp512173 1p5121731.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
