我HibernateJpaAutoConfiguration直接在Spring单元测试中使用。在EntityManager配置Hibernate和Hibernate时,不会扫描任何实体。
HibernateJpaAutoConfiguration
EntityManager
例外
10:29:36.377 [main] INFO o.s.b.f.a.AutowiredAnnotationBeanPostProcessor - JSR-330 javax.inject.Inject' annotation found and supported for autowiring 10:29:36.505 [main] TRACE o.s.b.b.PropertiesConfigurationFactory - Property Sources: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae 10:29:36.638 [main] TRACE o.s.b.b.PropertiesConfigurationFactory - Property Sources: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae 10:29:36.716 [main] TRACE o.s.b.b.PropertiesConfigurationFactory - Property Sources: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae 10:29:36.818 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'default' 10:29:36.842 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [ name: default ...] 10:29:36.979 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.3.6.Final} 10:29:36.980 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 10:29:36.982 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist 10:29:37.234 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.4.Final} 10:29:37.599 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL9Dialect 10:29:37.608 [main] INFO o.h.e.j.internal.LobCreatorBuilder - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 10:29:37.648 [main] INFO o.h.h.i.a.ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory 10:29:37.742 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate - HHH000228: Running hbm2ddl schema update 10:29:37.742 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate - HHH000102: Fetching database metadata 10:29:37.744 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema 10:29:37.745 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate - HHH000232: Schema update complete
我的解决方法是LocalContainerEntityManagerFactoryBean按照以下步骤创建自己的解决方案:
LocalContainerEntityManagerFactoryBean
final LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setPersistenceUnitName("buzzPU"); // persistence.xml factoryBean.setDataSource(dataSource); factoryBean.setJpaVendorAdapter(jpaVendorAdapter); factoryBean.setPersistenceXmlLocation("classpath*:META-INF/donotparsepersistence.xml"); factoryBean.setPackagesToScan("org.soluvas.buzz.core.jpa");
请注意,我不使用 META-INF/persistence.xml
META-INF/persistence.xml
从Spring Boot参考…
62.4将@Entity定义与Spring配置分开
Spring Boot会根据发现的@EnableAutoConfiguration尝试猜测@Entity定义的位置。为了获得更多控制权,您可以使用@EntityScan批注,例如
@Configuration @EnableAutoConfiguration @EntityScan(basePackageClasses=City.class) public class Application { //... }