From b5656489d0fb5142cf026a802e9acf8bde8c60ca Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 27 Jul 2010 00:04:23 +0000 Subject: [PATCH] FilterDefinitionFactoryBean supports Hibernate 3.6.0.beta1 as well git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3509 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../FilterDefinitionFactoryBean.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/FilterDefinitionFactoryBean.java b/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/FilterDefinitionFactoryBean.java index bb774c7ee92..04b7789d3b8 100644 --- a/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/FilterDefinitionFactoryBean.java +++ b/org.springframework.orm/src/main/java/org/springframework/orm/hibernate3/FilterDefinitionFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.orm.hibernate3; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @@ -26,6 +27,7 @@ import org.hibernate.type.TypeFactory; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.ReflectionUtils; /** * Convenient FactoryBean for defining Hibernate FilterDefinitions. @@ -64,6 +66,30 @@ import org.springframework.beans.factory.InitializingBean; */ public class FilterDefinitionFactoryBean implements FactoryBean, BeanNameAware, InitializingBean { + private static Method heuristicTypeMethod; + + private static Object typeResolver; + + static { + // Hibernate 3.6 TypeResolver class available? + try { + Class trClass = FilterDefinitionFactoryBean.class.getClassLoader().loadClass( + "org.hibernate.type.TypeResolver"); + heuristicTypeMethod = trClass.getMethod("heuristicType", String.class); + typeResolver = trClass.newInstance(); + } + catch (Exception ex) { + try { + heuristicTypeMethod = TypeFactory.class.getMethod("heuristicType", String.class); + typeResolver = null; + } + catch (Exception ex2) { + throw new IllegalStateException("Cannot find Hibernate's heuristicType method", ex2); + } + } + } + + private String filterName; private Map parameterTypeMap = new HashMap(); @@ -89,7 +115,8 @@ public class FilterDefinitionFactoryBean implements FactoryBean(parameterTypes.size()); for (Map.Entry entry : parameterTypes.entrySet()) { - this.parameterTypeMap.put(entry.getKey(), TypeFactory.heuristicType(entry.getValue())); + this.parameterTypeMap.put(entry.getKey(), + (Type) ReflectionUtils.invokeMethod(heuristicTypeMethod, typeResolver, entry.getValue())); } } else {