You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2009/04/12 05:19:47 UTC
svn commit: r764279 - in
/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc:
kernel/exps/PCPath.java meta/strats/EmbeddedClassStrategy.java
meta/strats/RelationMapInverseKeyFieldStrategy.java
meta/strats/RelationMapTableFieldStrategy.java
Author: fancy
Date: Sun Apr 12 03:19:46 2009
New Revision: 764279
URL: http://svn.apache.org/viewvc?rev=764279&view=rev
Log:
OPENJPA-967 JPA2 Query support for embeddable MapKey improvement/rework
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbeddedClassStrategy.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java
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=764279&r1=764278&r2=764279&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 Sun Apr 12 03:19:46 2009
@@ -809,31 +809,18 @@
LRSMapFieldStrategy strategy = (LRSMapFieldStrategy)
pstate.field.getStrategy();
ClassMapping mapping = pstate.field.getKeyMapping().getTypeMapping();
- if (strategy instanceof HandlerRelationMapTableFieldStrategy)
- strategy.selectKey(sel, mapping, null, ctx.store, ctx.fetch,
- pstate.joins);
- else {
- sel.select(_class.getPrimaryKeyColumns(), pstate.joins);
- FieldMapping[] fms = mapping.getDefinedFieldMappings();
- for (int i = 0; i < fms.length; i++)
- sel.select(fms[i].getColumns(), pstate.joins);
- }
+ strategy.selectKey(sel, mapping, null, ctx.store, ctx.fetch,
+ pstate.joins);
}
private Object loadEmbeddedMapKey(ExpContext ctx, ExpState state,
Result res) throws SQLException {
PathExpState pstate = (PathExpState) state;
validateMapStrategy(pstate.field.getStrategy());
- FieldMapping fmd = (FieldMapping) pstate.field.getKey().
- getValueMappedByMetaData();
LRSMapFieldStrategy strategy =
(LRSMapFieldStrategy) pstate.field.getStrategy();
- if (strategy instanceof HandlerRelationMapTableFieldStrategy)
- return strategy.loadKey(null, ctx.store, ctx.fetch, res,
- pstate.joins);
- else
- return fmd.getStrategy().
- loadProjection(ctx.store, ctx.fetch, res, pstate.joins);
+ return strategy.loadKey(null, ctx.store, ctx.fetch, res,
+ pstate.joins);
}
public void calculateValue(Select sel, ExpContext ctx, ExpState state,
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbeddedClassStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbeddedClassStrategy.java?rev=764279&r1=764278&r2=764279&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbeddedClassStrategy.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbeddedClassStrategy.java Sun Apr 12 03:19:46 2009
@@ -47,7 +47,11 @@
ClassMappingInfo info = cls.getMappingInfo();
info.assertNoSchemaComponents(cls, true);
- ClassMapping owner = vm.getFieldMapping().getDefiningMapping();
+ ClassMapping owner = null;
+ if (vm.getValueMappedByMapping() != null)
+ owner = vm.getValueMappedByMapping().getDefiningMapping();
+ else
+ owner = vm.getFieldMapping().getDefiningMapping();
cls.setIdentityType(owner.getIdentityType());
cls.setObjectIdType(owner.getObjectIdType(),
owner.isObjectIdTypeShared());
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java?rev=764279&r1=764278&r2=764279&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapInverseKeyFieldStrategy.java Sun Apr 12 03:19:46 2009
@@ -81,13 +81,23 @@
public void selectKey(Select sel, ClassMapping key, OpenJPAStateManager sm,
JDBCStore store, JDBCFetchConfiguration fetch, Joins joins) {
- throw new InternalException();
+ ValueMapping vm = field.getKeyMapping();
+ if (vm.isEmbedded())
+ sel.select(key, field.getKeyMapping().getSelectSubclasses(),
+ store, fetch, JDBCFetchConfiguration.EAGER_NONE, joins);
+ else
+ throw new InternalException();
}
public Object loadKey(OpenJPAStateManager sm, JDBCStore store,
JDBCFetchConfiguration fetch, Result res, Joins joins)
throws SQLException {
- throw new InternalException();
+ ValueMapping vm = field.getKeyMapping();
+ if (vm.isEmbedded())
+ return vm.getValueMappedByMapping().
+ loadProjection(store, fetch, res, joins);
+ else
+ throw new InternalException();
}
public Object deriveKey(JDBCStore store, Object value) {
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java?rev=764279&r1=764278&r2=764279&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationMapTableFieldStrategy.java Sun Apr 12 03:19:46 2009
@@ -22,7 +22,6 @@
import java.util.Collection;
import java.util.Map;
-import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCStore;
import org.apache.openjpa.jdbc.meta.ClassMapping;
@@ -81,13 +80,23 @@
public void selectKey(Select sel, ClassMapping key, OpenJPAStateManager sm,
JDBCStore store, JDBCFetchConfiguration fetch, Joins joins) {
- throw new InternalException();
+ ValueMapping vm = field.getKeyMapping();
+ if (vm.isEmbedded())
+ sel.select(key, field.getKeyMapping().getSelectSubclasses(),
+ store, fetch, JDBCFetchConfiguration.EAGER_NONE, joins);
+ else
+ throw new InternalException();
}
public Object loadKey(OpenJPAStateManager sm, JDBCStore store,
JDBCFetchConfiguration fetch, Result res, Joins joins)
throws SQLException {
- throw new InternalException();
+ ValueMapping vm = field.getKeyMapping();
+ if (vm.isEmbedded())
+ return vm.getValueMappedByMapping().
+ loadProjection(store, fetch, res, joins);
+ else
+ throw new InternalException();
}
public Object deriveKey(JDBCStore store, Object value) {