[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