From 99dac200f2834ecd5abb0da36272aded158d6558 Mon Sep 17 00:00:00 2001 From: Adam Warski Date: Wed, 30 Sep 2009 17:16:01 +0000 Subject: [PATCH] HHH-4449: - applying patch git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@17587 1b8cb986-b30d-0410-93ca-fae66ebed9b2 --- .../envers/event/AuditEventListener.java | 4 +-- .../org/hibernate/envers/tools/Tools.java | 30 ++++++++++--------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java b/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java index b0d04daa01..0fc68afb20 100644 --- a/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java +++ b/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java @@ -104,7 +104,7 @@ private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, E 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); @@ -124,7 +124,7 @@ private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, E 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); diff --git a/envers/src/main/java/org/hibernate/envers/tools/Tools.java b/envers/src/main/java/org/hibernate/envers/tools/Tools.java index c0d602c91a..e3689d7e63 100644 --- a/envers/src/main/java/org/hibernate/envers/tools/Tools.java +++ b/envers/src/main/java/org/hibernate/envers/tools/Tools.java @@ -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 @@ public static Object getIdentifier(SessionImplementor session, Object obj) { 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 @@ public static boolean iteratorsContentEqual(Iterator iter1, Iterator iter2) { } /** - * 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), ...) */