[hibernate-commits] Hibernate SVN: r15835 - in core/trunk/envers/src/main/java/org/hibernate/envers: entities/mapper/id and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jan 30 07:01:00 EST 2009


Author: adamw
Date: 2009-01-30 07:01:00 -0500 (Fri, 30 Jan 2009)
New Revision: 15835

Modified:
   core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java
   core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java
   core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java
   core/trunk/envers/src/main/java/org/hibernate/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
Log:
HHH-3744: applying the patch.

Thank you to Ben Clark!

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java	2009-01-30 10:39:53 UTC (rev 15834)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java	2009-01-30 12:01:00 UTC (rev 15835)
@@ -79,7 +79,9 @@
         if (parentCollectionChanges == null) {
             return mainCollectionChanges;
         } else {
-            parentCollectionChanges.addAll(mainCollectionChanges);
+        	if(mainCollectionChanges != null) {
+                parentCollectionChanges.addAll(mainCollectionChanges);
+        	}
 			return parentCollectionChanges;
         }
     }

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java	2009-01-30 10:39:53 UTC (rev 15834)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java	2009-01-30 12:01:00 UTC (rev 15835)
@@ -33,6 +33,7 @@
 
 import org.hibernate.property.Getter;
 import org.hibernate.property.Setter;
+import org.hibernate.proxy.HibernateProxy;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -77,8 +78,13 @@
             return null;
         }
 
-        Getter getter = ReflectionTools.getGetter(data.getClass(), propertyData);
-        return getter.get(data);
+        if(data instanceof HibernateProxy) {
+        	HibernateProxy hibernateProxy = (HibernateProxy) data;
+        	return hibernateProxy.getHibernateLazyInitializer().getIdentifier();
+        } else {
+        	Getter getter = ReflectionTools.getGetter(data.getClass(), propertyData);
+            return getter.get(data);
+        }
     }
 
     public void mapToMapFromId(Map<String, Object> data, Object obj) {
@@ -91,8 +97,13 @@
         if (obj == null) {
             data.put(propertyData.getName(), null);
         } else {
-            Getter getter = ReflectionTools.getGetter(obj.getClass(), propertyData);
-            data.put(propertyData.getName(), getter.get(obj));
+            if(obj instanceof HibernateProxy) {
+            	HibernateProxy hibernateProxy = (HibernateProxy)obj;
+            	data.put(propertyData.getName(), hibernateProxy.getHibernateLazyInitializer().getIdentifier());
+            } else {
+            	Getter getter = ReflectionTools.getGetter(obj.getClass(), propertyData);
+            	data.put(propertyData.getName(), getter.get(obj));
+            }
         }
     }
 

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2009-01-30 10:39:53 UTC (rev 15834)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2009-01-30 12:01:00 UTC (rev 15835)
@@ -57,6 +57,7 @@
 import org.hibernate.event.PreCollectionUpdateEvent;
 import org.hibernate.event.PreCollectionUpdateEventListener;
 import org.hibernate.persister.entity.EntityPersister;
+import org.hibernate.proxy.HibernateProxy;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -64,6 +65,8 @@
 public class AuditEventListener implements PostInsertEventListener, PostUpdateEventListener,
         PostDeleteEventListener, PreCollectionUpdateEventListener, PreCollectionRemoveEventListener,
         PostCollectionRecreateEventListener, Initializable {
+	private static final long serialVersionUID = -2499904286323112715L;
+
     private AuditConfiguration verCfg;
 
     private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, EntityPersister entityPersister,
@@ -93,7 +96,14 @@
                     if (newValue != null) {
                         // relDesc.getToEntityName() doesn't always return the entity name of the value - in case
                         // of subclasses, this will be root class, no the actual class. So it can't be used here.
-                        String toEntityName = session.guessEntityName(newValue);
+                        String toEntityName;
+                        if(newValue instanceof HibernateProxy) {
+                    	    HibernateProxy hibernateProxy = (HibernateProxy) newValue;
+                    	    toEntityName = session.bestGuessEntityName(newValue);
+                    	    newValue = hibernateProxy.getHibernateLazyInitializer().getImplementation();
+                    	} else {
+                    		toEntityName =  session.guessEntityName(newValue);
+                    	}
 
                         IdMapper idMapper = verCfg.getEntCfg().get(toEntityName).getIdMapper();
 
@@ -102,8 +112,15 @@
                     }
 
                     if (oldValue != null) {
-                        String toEntityName = session.guessEntityName(oldValue);
-
+                    	String toEntityName;
+                    	if(oldValue instanceof HibernateProxy) {
+                    	    HibernateProxy hibernateProxy = (HibernateProxy) oldValue;
+                    	    toEntityName = session.bestGuessEntityName(oldValue);
+                    	    oldValue = hibernateProxy.getHibernateLazyInitializer().getImplementation();
+                    	} else {
+                    		toEntityName =  session.guessEntityName(oldValue);
+                    	}
+                        
                         IdMapper idMapper = verCfg.getEntCfg().get(toEntityName).getIdMapper();
 
                         Serializable id = (Serializable) idMapper.mapToIdFromEntity(oldValue);

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java	2009-01-30 10:39:53 UTC (rev 15834)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java	2009-01-30 12:01:00 UTC (rev 15835)
@@ -46,7 +46,7 @@
                                               Serializable snapshot, Serializable id) {
         super(entityName, verCfg, null);
 
-        referencingPropertyName = role.substring(entityName.length() + 1);
+        referencingPropertyName = role.substring(role.lastIndexOf(".") + 1);
 
         collectionChanges = verCfg.getEntCfg().get(getEntityName()).getPropertyMapper()
                 .mapCollectionChanges(referencingPropertyName, collection, snapshot, id);




More information about the hibernate-commits mailing list