如何在HibernateJpaAutoConfiguration中指定packagesToScan?

编程入门 行业动态 更新时间:2024-10-25 09:25:58
本文介绍了如何在HibernateJpaAutoConfiguration中指定packagesToScan?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我直接在Spring单元测试中使用 HibernateJpaAutoConfiguration 。虽然配置了Hibernate和 EntityManager ,但没有实体被扫描。

例外

10:29:36.377 [main] INFO osbfaAutowiredAnnotationBeanPostProcessor - 找到并支持自动装配的JSR-330 javax.inject.Inject'注释 10:29:36.505 [main] TRACE osbbPropertiesConfigurationFactory - Property Sources:org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae 10:29:36.638 [main] TRACE osbbPropertiesConfigurationFactory - 属性来源:org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$FlatPropertySources@65f8f5ae 10:29:36.716 [main] TRACE osbbPropertiesConfigurationFactory - Property Sources:org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor $ FlatPropertySources @ 65f8f5ae 10:29:36.818 [main] INFO osojLocalContainerEntityManagerFa ctoryBean - 构建JPA容器EntityManagerFactory for persistence unit'default' 10:29:36.842 [main]信息ohjpa.internal.util.LogHelper - HHH000204:处理PersistenceUnitInfo [名称: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 10:29:36.982 [main] INFO org.hibernate.cfg.Environment - HHH000021:字节码提供程序名称:javassist 10:29:37.234 [主要]信息ohannotationsmon.Version - HCANN000001:Hibernate Commons Annotations {4.0.4.Final} 10:29:37.599 [main] INFO org.hibernate.dialect.Dialect - HHH000400:使用方言:org。 hibernate.dialect.postgreSQL9Dialect 10:29:37.608 [main] INFO ohejinternal.LobCreatorBuilder - HHH000424:禁用上下文LOB创建为createClob()方法抛出错误:java.lang.reflect.InvocationTargetException 10: 2 9:37.648 [main] INFO ohhiaASTQueryTranslatorFactory - HHH000397:使用ASTQueryTranslatorFactory 10:29:37.742 [main] INFO ohtool.hbm2ddl.SchemaUpdate - HHH000228:运行hbm2ddl模式更新 10:29:37.742 [主]信息ohtool.hbm2ddl.SchemaUpdate - HHH000102:获取数据库元数据 10:29:37.744 [main] INFO ohtool.hbm2ddl.SchemaUpdate - HHH000396:更新模式 10:29:37.745 [main ] INFO ohtool.hbm2ddl.SchemaUpdate - HHH000232:架构更新完成

我的解决方法是创建自己的 LocalContainerEntityManagerFactoryBean 如下:

finalContainerEntityManagerFactoryBean 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

解决方案

62.4 Spring配置中单独的@Entity定义

Spring Boot试图猜测您的@Entity定义的位置基于它找到的@EnableAutoConfiguration。为了获得更多控制权,您可以使用@EntityScan批注,例如

@Configuration @EnableAutoConfiguration @EntityScan(basePackageClasses = City.class) public class Application { // ... }

I'm using HibernateJpaAutoConfiguration directly in a Spring unit test. While Hibernate and EntityManager is configured, no entities are scanned.

Exception

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.annotationsmon.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

My workaround is to create my own LocalContainerEntityManagerFactoryBean as follows:

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");

Note that I don't use META-INF/persistence.xml

解决方案

From the Spring Boot reference...

62.4 Separate @Entity definitions from Spring configuration

Spring Boot tries to guess the location of your @Entity definitions, based on the @EnableAutoConfiguration it finds. To get more control, you can use the @EntityScan annotation, e.g.

@Configuration @EnableAutoConfiguration @EntityScan(basePackageClasses=City.class) public class Application { //... }

更多推荐

如何在HibernateJpaAutoConfiguration中指定packagesToScan?

本文发布于:2023-11-27 20:58:57,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何在   HibernateJpaAutoConfiguration   packagesToScan

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!