diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java b/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java index 0113d07b6d2..0a4bc9ee204 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java @@ -239,7 +239,22 @@ public class LocalSessionFactoryBuilder extends Configuration { @Override @SuppressWarnings("deprecation") public SessionFactory buildSessionFactory() throws HibernateException { - return super.buildSessionFactory(); + ClassLoader appClassLoader = (ClassLoader) getProperties().get(AvailableSettings.APP_CLASSLOADER); + Thread currentThread = Thread.currentThread(); + ClassLoader threadContextClassLoader = currentThread.getContextClassLoader(); + boolean overrideClassLoader = + (appClassLoader != null && !appClassLoader.equals(threadContextClassLoader)); + if (overrideClassLoader) { + currentThread.setContextClassLoader(appClassLoader); + } + try { + return super.buildSessionFactory(); + } + finally { + if (overrideClassLoader) { + currentThread.setContextClassLoader(threadContextClassLoader); + } + } } }