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 2008/12/16 17:44:28 UTC

svn commit: r727084 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-kernel/src/main/java/org/apache/openjpa/meta/ openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/

Author: faywang
Date: Tue Dec 16 08:44:26 2008
New Revision: 727084

URL: http://svn.apache.org/viewvc?rev=727084&view=rev
Log:
OPENJPA-782: embeddable support

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMappingInfo.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingInfo.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
    openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/PersistenceMappingDefaults.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMappingInfo.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMappingInfo.java?rev=727084&r1=727083&r2=727084&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMappingInfo.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMappingInfo.java Tue Dec 16 08:44:26 2008
@@ -35,7 +35,6 @@
 import org.apache.openjpa.meta.JavaTypes;
 import org.apache.openjpa.meta.MetaDataContext;
 import org.apache.openjpa.util.MetaDataException;
-import org.apache.openjpa.util.UserException;
 
 /**
  * Information about the mapping from a field to the schema, in raw form.
@@ -180,11 +179,20 @@
                         pos, cols);
             }
         };
-        ClassMapping cls = field.getDefiningMapping();
+        ClassMapping cls = getDefiningMapping(field);
         return createForeignKey(field, "join", cols, def, table, cls, cls,
             false, adapt);
     }
-
+    
+    private ClassMapping getDefiningMapping(FieldMapping field) {
+        ClassMapping clm = field.getDefiningMapping();
+        ValueMappingImpl value = (ValueMappingImpl)clm.getEmbeddingMetaData();
+        if (value == null)
+            return clm;
+        FieldMapping field1 = value.getFieldMapping();
+        return getDefiningMapping(field1);
+    }
+    
     /**
      * Unique constraint on the field join.
      */

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingInfo.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingInfo.java?rev=727084&r1=727083&r2=727084&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingInfo.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingInfo.java Tue Dec 16 08:44:26 2008
@@ -101,11 +101,24 @@
                         target, inverse, pos, cols);
             }
         };
+        Table table = getTable(val);
         return createForeignKey(val, null, getColumns(), def,
-            val.getFieldMapping().getTable(), val.getFieldMapping().
+            table, val.getFieldMapping().
             getDefiningMapping(), rel, inversable, adapt);
     }
 
+    private Table getTable(ValueMapping val) {
+        FieldMapping field = val.getFieldMapping();
+        Table table = field.getTable();
+        if (table == null) {
+            ClassMapping cls = (ClassMapping)field.getDefiningMetaData();
+            ValueMapping val1 = (ValueMapping)cls.getEmbeddingMetaData();
+            if (val1 != null)
+                return getTable(val1);
+        }
+        return table;
+    }
+    
     /**
      * Return the join from the related type to this value.
      */

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java?rev=727084&r1=727083&r2=727084&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java Tue Dec 16 08:44:26 2008
@@ -844,7 +844,7 @@
             }
 
             FieldMetaData field = (meta == null) ? null
-                : meta.getField(_mappedBy);
+                : getMappedByField(meta, _mappedBy);
             if (field == null)
                 throw new MetaDataException(_loc.get("no-mapped-by", this,
                     _mappedBy));
@@ -856,6 +856,25 @@
         return _mappedByMeta;
     }
 
+    public FieldMetaData getMappedByField(ClassMetaData meta, String mappedBy) {
+        FieldMetaData field = meta.getField(mappedBy);
+        if (field != null)
+            return field;
+        int dotIdx = mappedBy.indexOf("."); 
+        if ( dotIdx == -1)
+            return null;
+        String fieldName = mappedBy.substring(0, dotIdx);
+        FieldMetaData field1 = meta.getField(fieldName);
+        if (field1 == null)
+            return null;
+        ClassMetaData meta1 = field1.getEmbeddedMetaData();
+        if (meta1 == null)
+            return null;
+        String mappedBy1 = mappedBy.substring(dotIdx + 1);
+        return getMappedByField(meta1, mappedBy1);
+    }
+    
+    
     /**
      * Logical inverse field.
      */

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/PersistenceMappingDefaults.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/PersistenceMappingDefaults.java?rev=727084&r1=727083&r2=727084&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/PersistenceMappingDefaults.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/PersistenceMappingDefaults.java Tue Dec 16 08:44:26 2008
@@ -23,6 +23,7 @@
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 import org.apache.openjpa.jdbc.meta.MappingDefaultsImpl;
 import org.apache.openjpa.jdbc.meta.ValueMapping;
+import org.apache.openjpa.jdbc.meta.ValueMappingImpl;
 import org.apache.openjpa.jdbc.meta.Version;
 import org.apache.openjpa.jdbc.meta.strats.FlatClassStrategy;
 import org.apache.openjpa.jdbc.meta.strats.MultiColumnVersionStrategy;
@@ -36,6 +37,7 @@
 import org.apache.openjpa.jdbc.schema.Schema;
 import org.apache.openjpa.jdbc.schema.Table;
 import org.apache.openjpa.jdbc.sql.JoinSyntaxes;
+import org.apache.openjpa.meta.FieldMetaData;
 import org.apache.openjpa.meta.JavaTypes;
 import serp.util.Strings;
 
@@ -130,7 +132,10 @@
     @Override
     public String getTableName(FieldMapping fm, Schema schema) {
         // base name is table of defining type + '_'
-        String name = fm.getDefiningMapping().getTable().getName() + "_";
+        ClassMapping clm = fm.getDefiningMapping();
+        Table table = getTable(clm);
+        
+        String name = table.getName() + "_";
 
         // if this is an assocation table, spec says to suffix with table of
         // the related type. spec doesn't cover other cases; we're going to
@@ -144,6 +149,19 @@
             name += fm.getName();
         return name.replace('$', '_');
     }
+    
+    private Table getTable(ClassMapping clm) {
+        Table table = clm.getTable();
+        if (table == null) {
+            ValueMappingImpl value = (ValueMappingImpl)clm.getEmbeddingMetaData();
+            if (value == null)
+                return table;
+            FieldMetaData field = value.getFieldMetaData();
+            clm = (ClassMapping)field.getDefiningMetaData();
+            return getTable(clm);
+        }
+        return table;
+    }
 
     @Override
     public void populateJoinColumn(FieldMapping fm, Table local, Table foreign,