[hibernate-commits] Hibernate SVN: r17588 - in core/branches/envers-hibernate-3.3/src: main/java/org/hibernate/envers/entities/mapper/relation/lazy and 8 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Sep 30 13:20:45 EDT 2009


Author: adamw
Date: 2009-09-30 13:20:44 -0400 (Wed, 30 Sep 2009)
New Revision: 17588

Added:
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java
Removed:
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java
Modified:
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/ToOneIdMapper.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/tools/Tools.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/UnversionedStrTestEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/manytoone/unidirectional/TargetNotAuditedEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/manytoone/unidirectional/RelationNotAuditedTarget.java
   core/branches/envers-hibernate-3.3/src/test/resources/testng.xml
Log:
svn merge -r 17583:17587 https://svn.jboss.org/repos/hibernate/core/trunk/envers .

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/ToOneIdMapper.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/ToOneIdMapper.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/ToOneIdMapper.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -82,7 +82,7 @@
                 Class<?> entityClass = ReflectionTools.loadClass(referencedEntityName);
 
                 value = versionsReader.getSessionImplementor().getFactory().getEntityPersister(referencedEntityName).
-                        createProxy(null, new ToOneDelegateSessionImplementor(versionsReader, entityClass, entityId, revision, verCfg));
+                        createProxy((Serializable)entityId, new ToOneDelegateSessionImplementor(versionsReader, entityClass, entityId, revision, verCfg));
             }
         }
 

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -57,7 +57,7 @@
  * @author Adam Warski (adam at warski dot org)
  */
 public abstract class AbstractDelegateSessionImplementor implements SessionImplementor {
-    private SessionImplementor delegate;
+    protected SessionImplementor delegate;
 
     public AbstractDelegateSessionImplementor(SessionImplementor delegate) {
         this.delegate = delegate;

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -31,7 +31,6 @@
 import org.hibernate.envers.reader.AuditReaderImplementor;
 
 import org.hibernate.HibernateException;
-import org.hibernate.Session;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -62,8 +61,7 @@
 		if (notVersionedEntityConfiguration == null) {
 			return versionsReader.find(entityClass, entityId, revision);
 		} else {
-			Session session = versionsReader.getSession();
-			return session.get(entityClass, (Serializable) entityId);
+			return delegate.immediateLoad(entityName, (Serializable) entityId);
 		}
     }
 }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -105,7 +105,7 @@
                     	    toEntityName = session.bestGuessEntityName(newValue);
                     	    id = hibernateProxy.getHibernateLazyInitializer().getIdentifier();
 							// We've got to initialize the object from the proxy to later read its state.   
-							newValue = Tools.getTargetFromProxy(hibernateProxy);
+							newValue = Tools.getTargetFromProxy(session.getFactory(), hibernateProxy);
                     	} else {
                     		toEntityName =  session.guessEntityName(newValue);
 
@@ -125,7 +125,7 @@
                     	    toEntityName = session.bestGuessEntityName(oldValue);
                     	    id = hibernateProxy.getHibernateLazyInitializer().getIdentifier();
 							// We've got to initialize the object as we'll read it's state anyway.
-							oldValue = Tools.getTargetFromProxy(hibernateProxy);
+							oldValue = Tools.getTargetFromProxy(session.getFactory(), hibernateProxy);
                     	} else {
                     		toEntityName =  session.guessEntityName(oldValue);
 

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/tools/Tools.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/tools/Tools.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/tools/Tools.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -25,6 +25,7 @@
 
 import org.hibernate.proxy.HibernateProxy;
 import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.SessionFactoryImplementor;
 import org.hibernate.Session;
 
 import java.util.*;
@@ -66,20 +67,21 @@
 		return session.getEntityPersister(null, obj).getIdentifier(obj, session.getEntityMode());
 	}
 
-	public static Object getTargetFromProxy(HibernateProxy proxy) {
-		if (!proxy.getHibernateLazyInitializer().isUninitialized()) {
-			return proxy.getHibernateLazyInitializer().getImplementation();
-		}
+    public static Object getTargetFromProxy(SessionFactoryImplementor sessionFactoryImplementor, HibernateProxy proxy) {
+        if (!proxy.getHibernateLazyInitializer().isUninitialized()) {
+            return proxy.getHibernateLazyInitializer().getImplementation();
+        }
 
-		Session tempSession = proxy.getHibernateLazyInitializer().getSession().getFactory().openTemporarySession();
-		try {
-			proxy.getHibernateLazyInitializer().setSession((SessionImplementor) tempSession);
-			proxy.getHibernateLazyInitializer().initialize();
-			return proxy.getHibernateLazyInitializer().getImplementation();
-		} finally {
-			tempSession.close();
-		}
-	}
+        SessionImplementor sessionImplementor = proxy.getHibernateLazyInitializer().getSession();
+        Session tempSession = sessionImplementor==null ? sessionFactoryImplementor.openTemporarySession() : sessionImplementor.getFactory().openTemporarySession();
+        try {
+            proxy.getHibernateLazyInitializer().setSession((SessionImplementor) tempSession);
+            proxy.getHibernateLazyInitializer().initialize();
+            return proxy.getHibernateLazyInitializer().getImplementation();
+        } finally {
+            tempSession.close();
+        }
+    }
 
     public static boolean objectsEqual(Object obj1, Object obj2) {
         if (obj1 == null) {
@@ -113,7 +115,7 @@
     }
 
     /**
-     * Transforms a list of arbitrary elements to a list of index-element pairs. 
+     * Transforms a list of arbitrary elements to a list of index-element pairs.
      * @param list List to transform.
      * @return A list of pairs: ((0, element_at_index_0), (1, element_at_index_1), ...)
      */

Modified: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/UnversionedStrTestEntity.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/UnversionedStrTestEntity.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/UnversionedStrTestEntity.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -72,8 +72,8 @@
 
         UnversionedStrTestEntity that = (UnversionedStrTestEntity) o;
 
-        if (id != null ? !id.equals(that.id) : that.id != null) return false;
-        if (str != null ? !str.equals(that.str) : that.str != null) return false;
+        if (id != null ? !id.equals(that.getId()) : that.getId() != null) return false;
+        if (str != null ? !str.equals(that.getStr()) : that.getStr() != null) return false;
 
         return true;
     }
@@ -88,4 +88,4 @@
     public String toString() {
         return "USTE(id = " + id + ", str = " + str + ")";
     }
-}
\ No newline at end of file
+}

Modified: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/manytoone/unidirectional/TargetNotAuditedEntity.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/manytoone/unidirectional/TargetNotAuditedEntity.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/manytoone/unidirectional/TargetNotAuditedEntity.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -45,7 +45,7 @@
 	private String data;
 
 	@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
-	@ManyToOne(fetch = FetchType.EAGER)
+	@ManyToOne(fetch = FetchType.LAZY)
 	private UnversionedStrTestEntity reference;
 
 	public TargetNotAuditedEntity() { }
@@ -96,8 +96,8 @@
 
 		TargetNotAuditedEntity that = (TargetNotAuditedEntity) o;
 
-		if (data != null ? !data.equals(that.data) : that.data != null) return false;
-		if (id != null ? !id.equals(that.id) : that.id != null) return false;
+		if (data != null ? !data.equals(that.getData()) : that.getData() != null) return false;
+		if (id != null ? !id.equals(that.getId()) : that.getId() != null) return false;
 
 		return true;
 	}

Modified: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/manytoone/unidirectional/RelationNotAuditedTarget.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/manytoone/unidirectional/RelationNotAuditedTarget.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/manytoone/unidirectional/RelationNotAuditedTarget.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -32,6 +32,11 @@
 import org.hibernate.envers.test.AbstractEntityTest;
 import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
 import org.hibernate.envers.test.entities.manytoone.unidirectional.TargetNotAuditedEntity;
+
+import org.hibernate.Hibernate;
+import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.proxy.HibernateProxyHelper;
+
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
@@ -129,6 +134,9 @@
 
 	@Test
 	public void testHistoryOfTnae1_id() {
+		// load original "tnae1" TargetNotAuditedEntity to force load "str1" UnversionedStrTestEntity as Proxy
+		TargetNotAuditedEntity original = getEntityManager().find(TargetNotAuditedEntity.class, tnae1_id);
+
 		UnversionedStrTestEntity uste1 = getEntityManager().find(UnversionedStrTestEntity.class, uste1_id);
 		UnversionedStrTestEntity uste2 = getEntityManager().find(UnversionedStrTestEntity.class, uste2_id);
 
@@ -141,6 +149,11 @@
 		assert rev2.getReference().equals(uste2);
 		assert rev3.getReference().equals(uste2);
 		assert rev4.getReference().equals(uste1);
+
+		assert original.getReference() instanceof HibernateProxy;
+		assert UnversionedStrTestEntity.class.equals(Hibernate.getClass(original.getReference()));
+		assert UnversionedStrTestEntity.class.equals(HibernateProxyHelper.getClassWithoutInitializingProxy(rev1.getReference()));
+		assert UnversionedStrTestEntity.class.equals(Hibernate.getClass(rev1.getReference()));
 	}
 
 	@Test

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy (from rev 17587, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/proxy)

Deleted: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -1,90 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat Middleware LLC.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA
- */
-package org.hibernate.envers.test.integration.proxy;
-
-import org.hibernate.ejb.Ejb3Configuration;
-
-import org.hibernate.envers.test.AbstractEntityTest;
-import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
-import org.hibernate.envers.test.entities.manytoone.unidirectional.TargetNotAuditedEntity;
-
-import org.hibernate.proxy.HibernateProxy;
-import org.hibernate.proxy.LazyInitializer;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import javax.persistence.EntityManager;
-
-
-/**
- * @author Eugene Goroschenya
- */
-public class ProxyIdentifier extends AbstractEntityTest {
-    private TargetNotAuditedEntity tnae1;
-    private UnversionedStrTestEntity uste1;
-
-    public void configure(Ejb3Configuration cfg) {
-        cfg.addAnnotatedClass(TargetNotAuditedEntity.class);
-        cfg.addAnnotatedClass(UnversionedStrTestEntity.class);
-    }
-
-    @BeforeClass(dependsOnMethods = "init")
-    public void initData() {
-        EntityManager em = getEntityManager();
-
-        uste1 = new UnversionedStrTestEntity("str1");
-
-        // No revision
-        em.getTransaction().begin();
-        em.persist(uste1);
-        em.getTransaction().commit();
-
-        // Revision 1
-        em.getTransaction().begin();
-        uste1 = em.find(UnversionedStrTestEntity.class, uste1.getId());
-        tnae1 = new TargetNotAuditedEntity(1, "tnae1", uste1);
-        em.persist(tnae1);
-        em.getTransaction().commit();
-    }
-
-    @Test
-    public void testProxyIdentifier() {
-        TargetNotAuditedEntity rev1 = getAuditReader().find(TargetNotAuditedEntity.class, tnae1.getId(), 1);
-
-        assert rev1.getReference() instanceof HibernateProxy;
-
-        HibernateProxy proxyCreateByEnvers = (HibernateProxy) rev1.getReference();
-        LazyInitializer lazyInitializer = proxyCreateByEnvers.getHibernateLazyInitializer();
-
-        assert lazyInitializer.isUninitialized();
-        assert lazyInitializer.getIdentifier() != null;
-        assert lazyInitializer.getIdentifier().equals(tnae1.getId());
-        assert lazyInitializer.isUninitialized();
-
-        assert rev1.getReference().getId().equals(uste1.getId());
-        assert rev1.getReference().getStr().equals(uste1.getStr());
-        assert !lazyInitializer.isUninitialized();
-    }
-}

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java (from rev 17587, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/proxy/ProxyIdentifier.java	2009-09-30 17:20:44 UTC (rev 17588)
@@ -0,0 +1,90 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.proxy;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
+import org.hibernate.envers.test.entities.manytoone.unidirectional.TargetNotAuditedEntity;
+
+import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.proxy.LazyInitializer;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+
+
+/**
+ * @author Eugene Goroschenya
+ */
+public class ProxyIdentifier extends AbstractEntityTest {
+    private TargetNotAuditedEntity tnae1;
+    private UnversionedStrTestEntity uste1;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(TargetNotAuditedEntity.class);
+        cfg.addAnnotatedClass(UnversionedStrTestEntity.class);
+    }
+
+    @BeforeClass(dependsOnMethods = "init")
+    public void initData() {
+        EntityManager em = getEntityManager();
+
+        uste1 = new UnversionedStrTestEntity("str1");
+
+        // No revision
+        em.getTransaction().begin();
+        em.persist(uste1);
+        em.getTransaction().commit();
+
+        // Revision 1
+        em.getTransaction().begin();
+        uste1 = em.find(UnversionedStrTestEntity.class, uste1.getId());
+        tnae1 = new TargetNotAuditedEntity(1, "tnae1", uste1);
+        em.persist(tnae1);
+        em.getTransaction().commit();
+    }
+
+    @Test
+    public void testProxyIdentifier() {
+        TargetNotAuditedEntity rev1 = getAuditReader().find(TargetNotAuditedEntity.class, tnae1.getId(), 1);
+
+        assert rev1.getReference() instanceof HibernateProxy;
+
+        HibernateProxy proxyCreateByEnvers = (HibernateProxy) rev1.getReference();
+        LazyInitializer lazyInitializer = proxyCreateByEnvers.getHibernateLazyInitializer();
+
+        assert lazyInitializer.isUninitialized();
+        assert lazyInitializer.getIdentifier() != null;
+        assert lazyInitializer.getIdentifier().equals(tnae1.getId());
+        assert lazyInitializer.isUninitialized();
+
+        assert rev1.getReference().getId().equals(uste1.getId());
+        assert rev1.getReference().getStr().equals(uste1.getStr());
+        assert !lazyInitializer.isUninitialized();
+    }
+}

Modified: core/branches/envers-hibernate-3.3/src/test/resources/testng.xml
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/resources/testng.xml	2009-09-30 17:16:01 UTC (rev 17587)
+++ core/branches/envers-hibernate-3.3/src/test/resources/testng.xml	2009-09-30 17:20:44 UTC (rev 17588)
@@ -33,6 +33,7 @@
             <package name="org.hibernate.envers.test.integration.manytomany" />
             <package name="org.hibernate.envers.test.integration.manytomany.ternary" />
             <package name="org.hibernate.envers.test.integration.manytomany.unidirectional" />
+            <package name="org.hibernate.envers.test.integration.manytoone.unidirectional" />
             <package name="org.hibernate.envers.test.integration.naming" />
             <package name="org.hibernate.envers.test.integration.naming.ids" />
             <package name="org.hibernate.envers.test.integration.notinsertable" />
@@ -44,6 +45,7 @@
             <package name="org.hibernate.envers.test.integration.onetoone.unidirectional" />
             <package name="org.hibernate.envers.test.integration.primitive" />
             <package name="org.hibernate.envers.test.integration.properties" />
+            <package name="org.hibernate.envers.test.integration.proxy" />
             <package name="org.hibernate.envers.test.integration.query" />
             <package name="org.hibernate.envers.test.integration.query.ids" />
             <package name="org.hibernate.envers.test.integration.reference" />



More information about the hibernate-commits mailing list