You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2011/03/22 22:08:39 UTC

svn commit: r1084351 - in /openjpa/branches/2.1.x: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/

Author: curtisr7
Date: Tue Mar 22 21:08:39 2011
New Revision: 1084351

URL: http://svn.apache.org/viewvc?rev=1084351&view=rev
Log:
OPENJPA-1944: Properly handle a null version field.

Modified:
    openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/AnnoTest1.java
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestVersion.java

Modified: openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?rev=1084351&r1=1084350&r2=1084351&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Tue Mar 22 21:08:39 2011
@@ -131,7 +131,7 @@ public class StateManagerImpl
     // the managing persistence manager and lifecycle state
     private transient BrokerImpl _broker; // this is serialized specially
     private PCState _state = PCState.TRANSIENT;
-
+    
     // the current and last loaded version indicators, and the lock object
     private Object _version = null;
     private Object _loadVersion = null;
@@ -3069,7 +3069,8 @@ public class StateManagerImpl
             // always be set after the first state load or set (which is why
             // we do this even if no fields were loaded -- could be that this
             // method is being called after a field is set)
-            if (_loadVersion == null && (_meta == null || _meta.getVersionField() != null)) {
+            FieldMetaData versionMeta = _meta !=null ? _meta.getVersionField() : null;
+            if (_loadVersion == null && (versionMeta != null && !_loaded.get(versionMeta.getIndex()))) {
                 syncVersion(sdata);
                 ret = ret || _loadVersion != null;
             }

Modified: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/AnnoTest1.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/AnnoTest1.java?rev=1084351&r1=1084350&r2=1084351&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/AnnoTest1.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/AnnoTest1.java Tue Mar 22 21:08:39 2011
@@ -41,7 +41,7 @@ public class AnnoTest1 {
 
     @Version
     @Column(name = "ANNOVER")
-    protected int version;
+    protected Integer version;
 
     @Basic
     protected int basic;

Modified: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestVersion.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestVersion.java?rev=1084351&r1=1084350&r2=1084351&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestVersion.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestVersion.java Tue Mar 22 21:08:39 2011
@@ -34,7 +34,9 @@ public class TestVersion extends SingleE
 
     public void setUp() {
         setUp(AnnoTest1.class, AnnoTest2.class, AnnoTest3.class, Flat1.class,
-            EmbedOwner.class, EmbedValue.class, CLEAR_TABLES);
+            EmbedOwner.class, EmbedValue.class, CLEAR_TABLES
+            , "openjpa.Log","SQL=trace","openjpa.ConnectionFactoryProperties","printParameters=true"    
+        );
 
         EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
@@ -192,4 +194,38 @@ public class TestVersion extends SingleE
             cls.getVersion().getStrategy());
         assertEquals(1, cls.getVersion().getColumns().length);
     }
+    
+    public void testNullInitialVersion() {
+        EntityManager em = emf.createEntityManager();
+        EntityManager em2 = emf.createEntityManager();
+        try {
+            AnnoTest1 e = new AnnoTest1(System.currentTimeMillis());
+            em.getTransaction().begin();
+            em.persist(e);
+            em.createQuery("UPDATE AnnoTest1 a SET a.version=null where a.pk=:pk").setParameter("pk", e.getPk())
+                .executeUpdate();
+            em.getTransaction().commit();
+            em.close();
+             em = emf.createEntityManager();
+            
+            em.getTransaction().begin();
+            em2.getTransaction().begin();
+            
+            AnnoTest1 e2 = em2.find(AnnoTest1.class, e.getPk());
+            e = em.find(AnnoTest1.class, e.getPk());
+            
+            e.setBasic(1);
+            em.getTransaction().commit();
+
+            e2 = em2.find(AnnoTest1.class, e.getPk());
+            em2.refresh(e2);
+
+            assertEquals(1, e2.getBasic());
+        } finally {
+            if (em.getTransaction().isActive()) {
+                em.getTransaction().rollback();
+            }
+            em.close();
+        }
+    }
 }