You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2007/04/02 23:14:48 UTC

svn commit: r524921 - in /incubator/openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/ openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/ openjpa-persistence/src/main/java/org/apache/o...

Author: mikedd
Date: Mon Apr  2 14:14:48 2007
New Revision: 524921

URL: http://svn.apache.org/viewvc?view=rev&rev=524921
Log:
OpenJPA-185 allow optional to be overriden by xml descriptor.

Added:
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java   (with props)
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java   (with props)
Modified:
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Added: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java?view=auto&rev=524921
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java (added)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java Mon Apr  2 14:14:48 2007
@@ -0,0 +1,49 @@
+package org.apache.openjpa.persistence.xml;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.InvalidStateException;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+public class TestXmlOverrideEntity extends SingleEMFTestCase {
+
+    public void setUp() {
+        setUp(XmlOverrideEntity.class);
+    }
+
+    /**
+     * Tests that the optional attribute on a basic field can be overrided by
+     * an xml descriptor. 
+     * 
+     * XmlOverrideEntity.name is annotated with optional=false
+     * XmlOverrideEntity.description is annotated with optional=true. 
+     * 
+     * The optional attributes are reversed in orm.xml. 
+     */
+    public void testOptionalAttributeOverride() {
+        EntityManager em = emf.createEntityManager();
+
+        XmlOverrideEntity optional = new XmlOverrideEntity();
+
+        optional.setName(null);
+        optional.setDescription("description");
+
+        em.getTransaction().begin();
+        em.persist(optional);
+        em.getTransaction().commit();
+
+        try {
+            em.getTransaction().begin();
+            optional.setDescription(null);
+            em.getTransaction().commit();
+            fail("XmlOrverrideEntity.description should not be optional. "
+                    + "Expecting an InvalidStateException.");
+        } catch (InvalidStateException e) {
+        }
+
+        em.getTransaction().begin();
+        em.remove(em.find(XmlOverrideEntity.class, optional.getId()));
+        em.getTransaction().commit();
+    }
+}
+

Propchange: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java?view=auto&rev=524921
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java (added)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java Mon Apr  2 14:14:48 2007
@@ -0,0 +1,45 @@
+package org.apache.openjpa.persistence.xml;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class XmlOverrideEntity {
+
+    @Id
+    @GeneratedValue
+    int id;
+    
+    @Basic(optional=false)
+    String name;
+    
+    @Basic(optional=true)
+    String description;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    } 
+}
+

Propchange: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml?view=diff&rev=524921&r1=524920&r2=524921
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml (original)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml Mon Apr  2 14:14:48 2007
@@ -20,4 +20,11 @@
             <version name="version"/>
         </attributes>
     </entity>
-</entity-mappings>
\ No newline at end of file
+    <entity name="XmlOverride" class="XmlOverrideEntity">
+    	<attributes>
+	    <basic name="name" optional="true"></basic>
+	    <basic name="description" optional="false"></basic>
+    	</attributes>
+    </entity>
+</entity-mappings>
+

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?view=diff&rev=524921&r1=524920&r2=524921
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Mon Apr  2 14:14:48 2007
@@ -1196,6 +1196,12 @@
         val = attrs.getValue("optional");
         if ("false".equals(val))
             fmd.setNullValue(FieldMetaData.NULL_EXCEPTION);
+        else if ("true".equals(val)
+                && fmd.getNullValue() == FieldMetaData.NULL_EXCEPTION) {
+            // Reset value if the field was annotated with optional=false. 
+            // Otherwise leave it alone.
+            fmd.setNullValue(FieldMetaData.NULL_UNSET);
+        }
         if (isMappingOverrideMode()) {
             val = attrs.getValue("mapped-by");
             if (val != null)