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/09/17 09:49:14 UTC

svn commit: r816085 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-kernel/src/main/java/org/apache/openjpa/conf/ openjpa-kernel/src/main/java/org/apache/openjpa/meta/ openjpa-persistence-jdbc/src/test/java/org/apa...

Author: faywang
Date: Thu Sep 17 07:49:13 2009
New Revision: 816085

URL: http://svn.apache.org/viewvc?rev=816085&view=rev
Log:
OPENJPA-1253: support non-default uni-directional OneToMany using foreign key strategy, using JoinColumn annotation. 

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_FK.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_JT.java   (with props)
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/EntityC.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/compat/persistence_2_0.xml
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java Thu Sep 17 07:49:13 2009
@@ -28,6 +28,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
 import org.apache.openjpa.jdbc.meta.strats.BlobValueHandler;
 import org.apache.openjpa.jdbc.meta.strats.ByteArrayValueHandler;
@@ -964,8 +965,18 @@
         // an association table
         FieldMappingInfo info = field.getMappingInfo();
         ValueMapping elem = field.getElementMapping();
-        return info.getTableName() == null && info.getColumns().isEmpty()
+        boolean useInverseKeyMapping = info.getTableName() == null && info.getColumns().isEmpty()
             && !elem.getValueInfo().getColumns().isEmpty();
+        
+        OpenJPAConfiguration conf = field.getRepository().getConfiguration();
+        boolean isNonDefaultMappingAllowed = field.getRepository().
+            getMetaDataFactory().getDefaults().isNonDefaultMappingAllowed(conf);
+        if (isNonDefaultMappingAllowed && field.getValueInfo().getColumns().size() > 0) {
+            // uni-/M-1/joinColumn ==> useInverseKeyMapping (foreign key strategy)
+            field.getElementMapping().getValueInfo().setColumns(field.getValueInfo().getColumns());
+            return true;
+        }
+        return useInverseKeyMapping;
     }
 
     /**

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/Compatibility.java Thu Sep 17 07:49:13 2009
@@ -64,6 +64,7 @@
     private boolean _superclassDiscriminatorStrategyByDefault = true;
     private boolean _isAbstractMappingUniDirectional = false;
     private boolean _isJoinColumnAllowedForToManyRelation = false;
+    private boolean _isNonDefaultMappingAllowed = false;
     
     /**
      * Whether to require exact identity value types when creating object
@@ -476,4 +477,27 @@
     public boolean isJoinColumnAllowedForToManyRelation() {
         return _isJoinColumnAllowedForToManyRelation;
     }
+
+    /**
+     * Whether OpenJPA allows non-default entity relationship mapping. 
+     * Prior to OpenJPA 2.0, the non-default entity relationship mapping
+     * is not allowed. JPA 2.0 spec relaxes this restriction. The
+     * default value is false.
+     * @since 2.0.0
+     */
+    public void setNonDefaultMappingAllowed(boolean isNonDefaultMappingAllowed) {
+        _isNonDefaultMappingAllowed = isNonDefaultMappingAllowed;
+    }
+
+    /**
+     * Whether OpenJPA allows non-default entity relationship mapping. 
+     * Prior to OpenJPA 2.0, the non-default entity relationship mapping
+     * is not allowed. JPA 2.0 spec relaxes this restriction. The
+     * default value is false.
+     * @since 2.0.0
+     */
+    public boolean isNonDefaultMappingAllowed() {
+        return _isNonDefaultMappingAllowed;
+    }
+
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataDefaults.java Thu Sep 17 07:49:13 2009
@@ -121,4 +121,10 @@
      */
     public boolean isJoinColumnAllowedForToManyRelation(OpenJPAConfiguration conf);
 
+    /**
+     * Whether non-default mapping is allowed.
+     * @since 2.0.0
+     */
+    public boolean isNonDefaultMappingAllowed(OpenJPAConfiguration conf);
+    
 }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java Thu Sep 17 07:49:13 2009
@@ -167,4 +167,7 @@
         return false;
     }
     
+    public boolean isNonDefaultMappingAllowed(OpenJPAConfiguration conf) {
+        return false;
+    }
 }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/EntityC.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/EntityC.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/EntityC.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/EntityC.java Thu Sep 17 07:49:13 2009
@@ -21,8 +21,6 @@
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/TestSpecCompatibilityOptions.java Thu Sep 17 07:49:13 2009
@@ -18,17 +18,30 @@
  */
 package org.apache.openjpa.persistence.compat;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import javax.persistence.EntityManager;
+import javax.persistence.Query;
 
 import org.apache.openjpa.conf.Compatibility;
 import org.apache.openjpa.conf.Specification;
+import org.apache.openjpa.lib.jdbc.AbstractJDBCListener;
+import org.apache.openjpa.lib.jdbc.JDBCEvent;
+import org.apache.openjpa.lib.jdbc.JDBCListener;
 import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
 import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.jdbc.SQLSniffer;
 import org.apache.openjpa.persistence.test.AbstractCachedEMFTestCase;
 
 public class TestSpecCompatibilityOptions 
 extends AbstractCachedEMFTestCase {
     
+    protected List<String> sql = new ArrayList<String>();
+    protected int sqlCount;
+
     /*
      * Verifies compatibility options and spec level are appropriate
      * for a version 2 persistence.xml
@@ -84,11 +97,11 @@
      * a mapped superclass. 
      */
     public void testMappedSuperClass() {
-        OpenJPAEntityManagerFactorySPI emf =
-            (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
-                createEntityManagerFactory("persistence_2_0",
-                    "org/apache/openjpa/persistence/compat/" +
-                    "persistence_2_0.xml");
+        List<Class<?>> types = new ArrayList<Class<?>>();
+        types.add(EntityA.class);
+        types.add(EntityB.class);
+        types.add(MappedSuper.class);
+        OpenJPAEntityManagerFactorySPI emf = createEMF2_0(types);
         EntityManager em = null;
         try {
             em = emf.createEntityManager();
@@ -118,20 +131,95 @@
      * Per JPA 2.0, JoinColumn annotation is allowed on OneToMany relations.
      */
     public void testJoinColumnOnToManyRelation() {
-        OpenJPAEntityManagerFactorySPI emf =
-            (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
-                createEntityManagerFactory("persistence_2_0",
-                    "org/apache/openjpa/persistence/compat/" +
-                    "persistence_2_0.xml");
+        List<Class<?>> types = new ArrayList<Class<?>>();
+        types.add(EntityC.class);
+        types.add(Bi_1ToM_FK.class);
+        types.add(Uni_1ToM_FK.class);
+        types.add(Uni_1ToM_JT.class);
+
+        OpenJPAEntityManagerFactorySPI emf = createEMF2_0(types);
+        EntityManager em = emf.createEntityManager();
+
         try {
-            EntityManager em = emf.createEntityManager();
             // trigger table creation
             em.getTransaction().begin();
             em.getTransaction().commit();
             em.close();
             emf.close();
+            if (!SQLSniffer.matches(sql, "CREATE TABLE JnCol_C", "Bi1MFK_ColA"))
+                fail("JoinColumn annotation fails to be with OneToMany relation");
         } catch (Exception e) {
             fail("JoinColumn annotation fails to be with OneToMany relation");
         }
     }
+
+    /*
+     * Per JPA 2.0, non-default mapping of uni-directional OneToMany using
+     * foreign key strategy is allowed.
+     */
+    public void testNonDefaultUniOneToManyRelationUsingForeignKey() {
+        List<Class<?>> types = new ArrayList<Class<?>>();
+        types.add(EntityC.class);
+        types.add(Bi_1ToM_FK.class);
+        types.add(Uni_1ToM_FK.class);
+        types.add(Uni_1ToM_JT.class);
+        OpenJPAEntityManagerFactorySPI emf = createEMF2_0(types);
+        EntityManager em = emf.createEntityManager();
+        
+        try {
+            // trigger table creation
+            Uni_1ToM_FK uni1mfk = new Uni_1ToM_FK();
+            uni1mfk.setName("test");
+            EntityC c = new EntityC();
+            c.setName("c");
+            List cs = new ArrayList();
+            cs.add(c);
+            uni1mfk.setEntityAs(cs);
+            em.persist(uni1mfk);
+            em.persist(c);
+            em.getTransaction().begin();
+            em.getTransaction().commit();
+            em.close();
+            emf.close();
+            if (!SQLSniffer.matches(sql, "CREATE TABLE JnCol_C", "Uni1MFK_ColA"))
+                fail("JoinColumn annotation fails to be with OneToMany relation");
+        } catch (Exception e) {
+            fail("Non-default uni-directional OneToMany Using foreign key fails");
+        }
+    }
+
+    private OpenJPAEntityManagerFactorySPI createEMF2_0(List<Class<?>> types) {
+        Map<Object,Object> map = new HashMap<Object,Object>();
+        map.put("openjpa.jdbc.JDBCListeners", 
+                new JDBCListener[] { 
+                    this.new Listener() 
+                });
+        map.put("openjpa.jdbc.SynchronizeMappings", 
+            "buildSchema(ForeignKeys=true,SchemaAction='drop,add')");
+
+        StringBuffer buf = new StringBuffer();
+        for (Class<?> c : types) {
+            if (buf.length() > 0) {
+                buf.append(";");
+            }
+            buf.append(c.getName());
+        }
+        String oldValue =
+            map.containsKey("openjpa.MetaDataFactory") ? "," + map.get("openjpa.MetaDataFactory").toString() : "";
+        map.put("openjpa.MetaDataFactory", "jpa(Types=" + buf.toString() + oldValue + ")");
+        return (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
+                createEntityManagerFactory("persistence_2_0",
+                    "org/apache/openjpa/persistence/compat/" +
+                    "persistence_2_0.xml", map);        
+    }
+    
+    public class Listener extends AbstractJDBCListener {
+        @Override
+        public void beforeExecuteStatement(JDBCEvent event) {
+            if (event.getSQL() != null && sql != null) {
+                sql.add(event.getSQL());
+                sqlCount++;
+            }
+        }
+    }
 }

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_FK.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_FK.java?rev=816085&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_FK.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_FK.java Thu Sep 17 07:49:13 2009
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.compat;
+
+import java.util.List;
+
+import javax.persistence.*;
+
+//non-default mapping
+//Sec 11.1.36, Example 3: 
+//    Unidirectional One-to-Many association using a foreign key mapping
+//    In Customer class:
+//    @OneToMany(orphanRemoval=true)
+//    @JoinColumn(name="CUST_ID") // join column is in table for Order
+//    public Set<Order> getOrders() {return orders;}
+
+@Entity
+public class Uni_1ToM_FK {
+
+    @Id
+    @GeneratedValue
+    private long id;
+
+    private String name;
+
+    @OneToMany
+    @JoinColumn(name="Uni1MFK_ColA")
+    private List<EntityC> entityAs = null;
+    
+    public long getId() { 
+        return id; 
+    }
+
+    public String getName() { 
+        return name; 
+    }
+
+    public void setName(String name) { 
+        this.name = name; 
+    }
+
+    public List<EntityC> getEntityAs() { 
+        return entityAs; 
+    }
+
+    public void setEntityAs(List<EntityC> entityAs) { 
+        this.entityAs = entityAs; 
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_FK.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_JT.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_JT.java?rev=816085&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_JT.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_JT.java Thu Sep 17 07:49:13 2009
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.compat;
+
+import java.util.List;
+
+import javax.persistence.*;
+
+
+@Entity
+public class Uni_1ToM_JT {
+
+    @Id
+    @GeneratedValue
+    private long id;
+
+    private String name;
+
+    @OneToMany
+    @JoinTable(
+            name="Uni_1TOM_JT_C",
+            joinColumns=
+            @JoinColumn(name="Uni1MJT_ID", referencedColumnName="ID"),
+            inverseJoinColumns=
+            @JoinColumn(name="C_ID", referencedColumnName="ID")
+            )    
+    private List<EntityC> entityAs = null;
+    
+    public long getId() { 
+        return id; 
+    }
+
+    public String getName() { 
+        return name; 
+    }
+
+    public void setName(String name) { 
+        this.name = name; 
+    }
+
+    public List<EntityC> getEntityAs() { 
+        return entityAs; 
+    }
+
+    public void setEntityAs(List<EntityC> entityAs) { 
+        this.entityAs = entityAs; 
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/compat/Uni_1ToM_JT.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/compat/persistence_2_0.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/compat/persistence_2_0.xml?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/compat/persistence_2_0.xml (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/compat/persistence_2_0.xml Thu Sep 17 07:49:13 2009
@@ -24,11 +24,5 @@
         http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
     version="2.0" >
     <persistence-unit name="persistence_2_0" transaction-type="RESOURCE_LOCAL">
-	<class>org.apache.openjpa.persistence.compat.EntityA</class>
-	<class>org.apache.openjpa.persistence.compat.EntityB</class>
-	<class>org.apache.openjpa.persistence.compat.EntityC</class>
-	<class>org.apache.openjpa.persistence.compat.MappedSuper</class>
-	<class>org.apache.openjpa.persistence.compat.Bi_1ToM_FK</class>
-    
     </persistence-unit>
 </persistence>
\ No newline at end of file

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java Thu Sep 17 07:49:13 2009
@@ -133,6 +133,7 @@
     protected SetterFilter setterFilter = new SetterFilter();
     private Boolean _isAbstractMappingUniDirectional = null;
     private Boolean _isJoinColumnAllowedForToManyRelation = null;
+    private Boolean _isNonDefaultMappingAllowed = null;
     
     public PersistenceMetaDataDefaults() {
         setCallbackMode(CALLBACK_RETHROW | CALLBACK_ROLLBACK |
@@ -884,4 +885,15 @@
         _isJoinColumnAllowedForToManyRelation = conf.getCompatibilityInstance().
             isJoinColumnAllowedForToManyRelation();
     }
+
+    public boolean isNonDefaultMappingAllowed(OpenJPAConfiguration conf) {
+        if (_isNonDefaultMappingAllowed == null)
+            setNonDefaultMappingAllowed(conf);
+        return _isNonDefaultMappingAllowed;
+    }
+
+    public void setNonDefaultMappingAllowed(OpenJPAConfiguration conf) {
+        _isNonDefaultMappingAllowed = conf.getCompatibilityInstance().
+            isNonDefaultMappingAllowed();
+    }
 }

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java?rev=816085&r1=816084&r2=816085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java Thu Sep 17 07:49:13 2009
@@ -187,6 +187,7 @@
         } else {
             compatibility.setAbstractMappingUniDirectional(true);
             compatibility.setJoinColumnAllowedForToManyRelation(true);
+            compatibility.setNonDefaultMappingAllowed(true);
         }
         return true;
     }