You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ht...@apache.org on 2013/10/08 19:35:57 UTC
svn commit: r1530368 - in /openjpa/trunk: ./
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/external/TestExternalValues.java
Author: hthomann
Date: Tue Oct 8 17:35:57 2013
New Revision: 1530368
URL: http://svn.apache.org/r1530368
Log:
OPENJPA-2425: SELECT fields with @ExternalValues defined returns datastore values instead of unmapped fields - applied Albert Lee's patch to trunk.
Modified:
openjpa/trunk/ (props changed)
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/external/TestExternalValues.java
Propchange: openjpa/trunk/
------------------------------------------------------------------------------
Merged /openjpa/branches/2.2.1.x:r1530347
Merged /openjpa/branches/2.2.x:r1530364
Merged /openjpa/branches/2.1.x:r1530146
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java?rev=1530368&r1=1530367&r2=1530368&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java Tue Oct 8 17:35:57 2013
@@ -918,14 +918,18 @@ public class PCPath
}
Object ret;
- if (_key)
+ if (_key) {
// Map key is a java primitive type
- // example: Map<Integer, Employee> emps
- ret = res.getObject(pstate.cols[0],
- null, pstate.joins);
- else
- ret = pstate.field.loadProjection(ctx.store, ctx.fetch, res,
- pstate.joins);
+ // example: Map<Integer, Employee> emps
+ ret = res.getObject(pstate.cols[0], null, pstate.joins);
+ } else {
+ ret = pstate.field.loadProjection(ctx.store, ctx.fetch, res, pstate.joins);
+ }
+
+ if (pstate.field.isExternalized()) {
+ ret = pstate.field.getFieldValue(ret, ctx.store.getContext());
+ }
+
if (_cast != null)
ret = Filters.convert(ret, _cast);
return ret;
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/external/TestExternalValues.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/external/TestExternalValues.java?rev=1530368&r1=1530367&r2=1530368&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/external/TestExternalValues.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/external/TestExternalValues.java Tue Oct 8 17:35:57 2013
@@ -18,6 +18,9 @@
*/
package org.apache.openjpa.persistence.external;
+import java.util.Iterator;
+import java.util.List;
+
import javax.persistence.EntityManager;
import javax.persistence.Query;
@@ -55,6 +58,30 @@ public class TestExternalValues extends
Assert.assertEquals("MEDIUM", aPrime.getS2());
Assert.assertEquals(true, aPrime.getUseStreaming());
+ em.getTransaction().begin();
+
+ entity = new EntityA();
+ entity.setS1("LARGE");
+ entity.setS2("LARGE");
+ entity.setUseStreaming(false);
+ em.persist(entity);
+
+ em.getTransaction().commit();
+
+ q = em.createQuery("SELECT t0.id, t0.s1, t0._useStreaming, t0.s2 FROM EntityA t0 ORDER BY t0.s1 DESC");
+ List<Object[]> res = q.getResultList();
+
+ Iterator<Object[]> itr = res.iterator();
+ Object[] values = itr.next();
+ Assert.assertEquals("SMALL", values[1]);
+ Assert.assertEquals(Boolean.TRUE, values[2]);
+ Assert.assertEquals("MEDIUM", values[3]);
+
+ values = itr.next();
+ Assert.assertEquals("LARGE", values[1]);
+ Assert.assertEquals(Boolean.FALSE, values[2]);
+ Assert.assertEquals("LARGE", values[3]);
+
em.close();
}