|
21 | 21 | import javax.persistence.EntityManager;
|
22 | 22 | import javax.sql.DataSource;
|
23 | 23 |
|
24 |
| -import org.hibernate.jpa.HibernateEntityManager; |
25 | 24 | import org.springframework.beans.factory.BeanClassLoaderAware;
|
26 | 25 | import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
27 | 26 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
| 27 | +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; |
28 | 28 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
29 | 29 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
| 30 | +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; |
30 | 31 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
31 | 32 | import org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection;
|
| 33 | +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.HibernateEntityManagerCondition; |
32 | 34 | import org.springframework.boot.bind.RelaxedPropertyResolver;
|
33 | 35 | import org.springframework.boot.orm.jpa.SpringNamingStrategy;
|
| 36 | +import org.springframework.context.annotation.ConditionContext; |
| 37 | +import org.springframework.context.annotation.Conditional; |
34 | 38 | import org.springframework.context.annotation.Configuration;
|
35 | 39 | import org.springframework.core.env.Environment;
|
| 40 | +import org.springframework.core.type.AnnotatedTypeMetadata; |
36 | 41 | import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
37 | 42 | import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
|
38 | 43 | import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
|
39 | 44 | import org.springframework.transaction.annotation.EnableTransactionManagement;
|
| 45 | +import org.springframework.util.ClassUtils; |
40 | 46 |
|
41 | 47 | /**
|
42 | 48 | * {@link EnableAutoConfiguration Auto-configuration} for Hibernate JPA.
|
|
45 | 51 | */
|
46 | 52 | @Configuration
|
47 | 53 | @ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class,
|
48 |
| - EnableTransactionManagement.class, EntityManager.class, |
49 |
| - HibernateEntityManager.class }) |
| 54 | + EnableTransactionManagement.class, EntityManager.class }) |
| 55 | +@Conditional(HibernateEntityManagerCondition.class) |
50 | 56 | @ConditionalOnBean(DataSource.class)
|
51 | 57 | @AutoConfigureAfter(DataSourceAutoConfiguration.class)
|
52 | 58 | public class HibernateJpaAutoConfiguration extends JpaBaseConfiguration implements
|
@@ -97,4 +103,20 @@ private String getDefaultDdlAuto() {
|
97 | 103 | }
|
98 | 104 | return "create-drop";
|
99 | 105 | }
|
| 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 | + |
100 | 122 | }
|
0 commit comments