From ce3c72f8c2e1b0a3ff610fe4252e05fd351cd17d Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 26 Aug 2009 15:20:53 +0000 Subject: [PATCH] compatibility with Hibernate 3.5 beta 1 --- .../orm/hibernate3/LocalSessionFactoryBean.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java b/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java index f5869b1319..ac77e4a9ab 100644 --- a/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java +++ b/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/LocalSessionFactoryBean.java @@ -18,6 +18,7 @@ package org.springframework.orm.hibernate3; import java.io.File; import java.lang.reflect.Array; +import java.lang.reflect.Method; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; @@ -35,7 +36,6 @@ import org.hibernate.SessionFactory; import org.hibernate.cache.CacheProvider; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; -import org.hibernate.cfg.Mappings; import org.hibernate.cfg.NamingStrategy; import org.hibernate.dialect.Dialect; import org.hibernate.engine.FilterDefinition; @@ -52,6 +52,7 @@ import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.jdbc.support.JdbcUtils; import org.springframework.jdbc.support.lob.LobHandler; import org.springframework.util.ClassUtils; +import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; /** @@ -578,9 +579,15 @@ public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implemen if (this.typeDefinitions != null) { // Register specified Hibernate type definitions. - Mappings mappings = config.createMappings(); + // Use reflection for compatibility with both Hibernate 3.3 and 3.5: + // the returned Mappings object changed from a class to an interface. + Method createMappings = Configuration.class.getMethod("createMappings"); + Method addTypeDef = createMappings.getReturnType().getMethod( + "addTypeDef", String.class, String.class, Properties.class); + Object mappings = ReflectionUtils.invokeMethod(createMappings, config); for (TypeDefinitionBean typeDef : this.typeDefinitions) { - mappings.addTypeDef(typeDef.getTypeName(), typeDef.getTypeClass(), typeDef.getParameters()); + ReflectionUtils.invokeMethod(addTypeDef, mappings, + typeDef.getTypeName(), typeDef.getTypeClass(), typeDef.getParameters()); } }