Skip to content

Commit 6528062

Browse files
author
Dave Syer
committed
Use custom condition to detect Hibernate 4.2 and 4.3
...without any deprecation warnings and with some chance that it will still work with Hibernate 5. Fixes gh-256
1 parent 258a111 commit 6528062

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,28 @@
2121
import javax.persistence.EntityManager;
2222
import javax.sql.DataSource;
2323

24-
import org.hibernate.jpa.HibernateEntityManager;
2524
import org.springframework.beans.factory.BeanClassLoaderAware;
2625
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2726
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
27+
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
2828
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2929
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
30+
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
3031
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
3132
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection;
33+
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.HibernateEntityManagerCondition;
3234
import org.springframework.boot.bind.RelaxedPropertyResolver;
3335
import org.springframework.boot.orm.jpa.SpringNamingStrategy;
36+
import org.springframework.context.annotation.ConditionContext;
37+
import org.springframework.context.annotation.Conditional;
3438
import org.springframework.context.annotation.Configuration;
3539
import org.springframework.core.env.Environment;
40+
import org.springframework.core.type.AnnotatedTypeMetadata;
3641
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
3742
import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
3843
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
3944
import org.springframework.transaction.annotation.EnableTransactionManagement;
45+
import org.springframework.util.ClassUtils;
4046

4147
/**
4248
* {@link EnableAutoConfiguration Auto-configuration} for Hibernate JPA.
@@ -45,8 +51,8 @@
4551
*/
4652
@Configuration
4753
@ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class,
48-
EnableTransactionManagement.class, EntityManager.class,
49-
HibernateEntityManager.class })
54+
EnableTransactionManagement.class, EntityManager.class })
55+
@Conditional(HibernateEntityManagerCondition.class)
5056
@ConditionalOnBean(DataSource.class)
5157
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
5258
public class HibernateJpaAutoConfiguration extends JpaBaseConfiguration implements
@@ -97,4 +103,20 @@ private String getDefaultDdlAuto() {
97103
}
98104
return "create-drop";
99105
}
106+
107+
public static class HibernateEntityManagerCondition extends SpringBootCondition {
108+
109+
@Override
110+
public ConditionOutcome getMatchOutcome(ConditionContext context,
111+
AnnotatedTypeMetadata metadata) {
112+
if (ClassUtils.isPresent("org.hibernate.ejb.HibernateEntityManager",
113+
context.getClassLoader())
114+
|| ClassUtils.isPresent("org.hibernate.jpa.HibernateEntityManager",
115+
context.getClassLoader())) {
116+
return ConditionOutcome.match("found HibernateEntityManager class");
117+
}
118+
return ConditionOutcome.noMatch("did not find HibernateEntityManager class");
119+
}
120+
}
121+
100122
}

0 commit comments

Comments
 (0)