Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory [英] Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory
问题描述
我使用的是Spring引导,因此在Tomcat 7中部署了一场战争。当我启动应用程序时,我得到以下内容:
2013年12月30日7:41:06 org.apache.catalina.core.ApplicationContext log
INFO:初始化Spring FrameworkServlet'dispatcherServlet'
2013-12-30 19:41:06 INFO DispatcherServlet:461 - FrameworkServlet'dispatcherServlet':初始化开始
2013-12-30 19:41:06信息SimpleUrlHandlerMapping:315 - 映射的URL路径[/**/favicon.ico]到[class org。 springframework.web.servlet.resource.ResourceHttpRequestHandler]
2013-12-30 19:41:06 INFO RequestMappingHandlerMapping:181 - 映射{[/ user],methods = [GET],params = [],headers = [],消费= [],产生= [],自定义= []}到公共com.cloudfordev.controlpanel.orm.User com.cloudfordev.controlpanel.GetController.getUser(int)
2013-12- 30 19:41:07 INFO SimpleUrlHandlerMapping:315 - 映射的URL路径[/ **]到[class org.springframework.web.servlet.res myce.ResourceHttpRequestHandler]
2013-12-30 19:41:07 INFO SimpleUrlHandlerMapping:315 - 映射的URL路径[/ webjars / **]到类型为[org.springframework.web.servlet.resource.ResourceHttpRequestHandler ]
2013-12-30 19:41:08 INFO DispatcherServlet:480 - FrameworkServlet'dispatcherServlet':初始化在1957年完成ms
2013年12月30日7:41:08 org.apache.coyote。 AbstractProtocol start
INFO:Starting ProtocolHandler [http-nio-8080]
2013年12月30日7:41:08 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO :使用servlet的共享选择器写/读
2013年12月30日7时41分08秒org.apache.coyote.AbstractProtocol停止
信息:停止ProtocolHandler [http-nio-8080]
2013年12月30日7:41:08 org.apache.coyote.AbstractProtocol暂停
INFO:暂停ProtocolHandler [http-nio-8080]
2013年12月30日7:41: 08 PM org.apache.catalina.core.StandardService stopInternal
INFO:停止服务Tomcat
2013年12月30日7:41:08 org.apache.coyote.AbstractProtocol stop
INFO:停止ProtocolHandler [http-nio-8080]
2013年12月30日7:41:08 PM org.apache.coyote.AbstractProtocol销毁
INFO:销毁ProtocolHandler [http-nio-8080]
2013-12-30 19:41:08 INFO AutoConfigurationReportLoggingInitializer $ AutoConfigurationReportLogger:108 -
=========================
AUTO-CONFIGURATION REPORT
===== ====================
正面匹配:
----------- ------
MessageSourceAutoConfiguration
- @ConditionalOnMissingBean(类型:org.springframework.context.MessageSource; SearchStrategy:all)找不到bean(OnBeanCondition)
PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer
- @ConditionalOnMissingBean(types:org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy:current)found no beans(OnBeanCondition) )
DataSourceAutoConfiguration
- @ConditionalOnClass班发现:org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType(OnClassCondition)
- @ConditionalOnClass班发现:org.springframework.jdbc。 datasource.embedded.EmbeddedDatabaseType(OnClassCondition)
DataSourceTransactionManagerAutoConfiguration $ b $ - 找到@ConditionalOnClass类:org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager(OnClassCondition)
- 找到@ConditionalOnClass类:org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransaction Manager(OnClassCondition)
JpaBaseConfiguration.JpaWebConfiguration
- 找到的Web应用程序StandardServletEnvironment(OnWebApplicationCondition)
- org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration上的SpEL表达式$ JpaWebConfiguration :#{true}(OnExpressionCondition)
DispatcherServletAutoConfiguration
- 找到的Web应用程序StandardServletEnvironment(OnWebApplicationCondition)
- 找到的@ConditionalOnClass类:org.springframework.web.servlet.DispatcherServlet(OnClassCondition )
- 找到web应用程序StandardServletEnvironment(OnWebApplicationCondition)
- 找到@ConditionalOnClass类:org.springframework.web.servlet.DispatcherServlet(OnClassCondition)
- @ConditionalOnBean(类型:org.springframework.boot .context.embedded.EmbeddedServletContainerFactory; SearchStrategy:all)找到下列[tomcatEmbeddedServletContainerFactory](OnBeanCondition)
DispatcherServletAutoConfiguration#dispatcherServlet
- no找到DispatcherServlet(DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
EmbeddedServletContainerAutoConfiguration
- 找到Web应用程序StandardServletEnvironment(OnWebApplicationCondition)
- 找到的Web应用程序StandardServletEnvironment(OnWebApplicationCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat $ b $ - 找到的@ConditionalOnClass类:javax.servlet.Servlet,org.apache .catalina.startup.Tomcat(OnClassCondition)
- @ConditionalOnClass班发现:javax.servlet.Servlet,org.apache.catalina.startup.Tomcat(OnClassCondition)
- @ConditionalOnMissingBean(类型:org.springframework .boot.context.embedded.EmbeddedServletContainerFactory; SearchStrategy:current)未找到bean(OnBea nCondition)
ServerPropertiesAutoConfiguration#serverProperties
- @ConditionalOnMissingBean(类型:org.springframework.boot.context.embedded.properties.ServerProperties; SearchStrategy:所有)没有发现豆(OnBeanCondition)
WebMvcAutoConfiguration
- 发现Web应用程序StandardServletEnvironment(OnWebApplicationCondition)
- 发现@ConditionalOnClass类:javax.servlet.Servlet,org.springframework .web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annota
tion.WebMvcConfigurerAdapter(OnClassCondition)
- 找到的Web应用程序StandardServletEnvironment(OnWebApplicationCondition)
- 找到@ConditionalOnClass类: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annota
tion.WebMvcConfigurerAdapter(OnClassCondition)
- @ConditionalOnMissingBean(类型:org.springframework .web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy:所有)没有发现豆(OnBeanCondition)
WebMvcAutoConfiguration#hiddenHttpMethodFilter
- @ConditionalOnMissingBean(类型:组织.springframework.web.filter.HiddenHttpMethodFilter; SearchStrategy:all)找不到bean(OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver
- @ConditionalOnMissingBean(类型:org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy:全部)没有bean(OnBeanCondition)
负值匹配:
-----------------
RabbitAutoConfiguration
- 必填@ConditionalOnClass类未找到:org.springframework.amqp.rabbit.core.RabbitTemplate,com.rabbitmq.client.Channel(OnClassCondition)
AopAutoConfiguration
- required @未找到ConditionalOnClass类:org.aspectj.lang.annotation.Aspect,org.aspectj.lang.reflect.Advice(OnClassCondition)
BatchAutoConfiguration
- 必需的@ConditionalOnClass类未找到:org。 springframework.batch.core.launch.JobLauncher(OnClassCondition)
JpaRepositoriesAutoConfiguration
- 必需@ConditionalOnC未找到所需的@ConditionalOnClass类 - org.springframework.data.jpa.repository.JpaRepository(OnClassCondition)
MongoRepositoriesAutoConfiguration
:com.mongodb.Mongo,org.springframework找不到姑娘类。 data.mongodb.repository.MongoRepository(OnClassCondition)
DataSourceAutoConfiguration.DbcpConfiguration
- org.apache.commons.dbcp.BasicDataSource DataSource类未找到(DataSourceAutoConfiguration.BasicDatabaseCondition)
$ DataSourceAutoConfiguration.EmbeddedConfiguration
- 未检测到嵌入式数据库(DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration
- 没有现有的bean配置数据库(DataSourceAutoConfiguration.DatabaseCondition)
DataSourceAutoConfiguration.TomcatConfiguration
- org.apache.tomcat.jdbc.pool.DataSource未找到DataSource类(DataSourceAutoConfiguration.Tomc atDatabaseCondition)
DataSourceTransactionManagerAutoConfiguration#transactionManager
- @ConditionalOnBean(types:javax.sql.DataSource; SearchStrategy:所有)没有发现豆(OnBeanCondition)
JmsTemplateAutoConfiguration
- 需要@ConditionalOnClass类未找到:org.springframework.jms.core.JmsTemplate,javax.jms.ConnectionFactory(OnClassCondition)
DeviceResolverAutoConfiguration
- 必需的@ConditionalOnClass找不到的类:org.springframework.mobile.device.DeviceResolverHandlerInterceptor,org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver(OnClassCondition)
HibernateJpaAutoConfiguration
- 找到@ConditionalOnClass类:org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,org.springframework.transaction.annotation.EnableTransactionManagement,javax.persistence.EntityManager,org.hibernate.ejb.HibernateEntityManager(OnClassCondition)
- 找到@ConditionalOnClass类:org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,org.springframework.transaction.annotation.EnableTrans actionManagement,javax.persistence.EntityManager,org.hibernate.ejb.HibernateEntityManager(OnClassCondition)
- @ConditionalOnBean(types:javax.sql.DataSource; SearchStrategy:all)找不到bean(OnBeanCondition)
ReactorAutoConfiguration $ b $ - 必需@ConditionalOnClass类未找到:reactor.spring.context.config.EnableReactor(OnClassCondition)
ThymeleafAutoConfiguration
- 必需@ConditionalOnClass类未找到:org.thymeleaf.spring3.SpringTemplateEngine(OnClassCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedJetty
- 必需的@ConditionalOnClass类未找到:org.eclipse .jetty.server.Server,org.eclipse.jetty.util.Loader(OnClassCondition)
MultipartAutoConfiguration
- 找到的@ConditionalOnClass类:javax.servlet.Servlet,org.springframework.web。 multipart.support.StandardServletMultipartResolver(OnClassCondition)
- 找到@ConditionalOnClass类:javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver(OnClassCondition)
- @ConditionalOnBean(types :javax.servlet.MultipartConfigElement; SearchStrategy:all)找不到bean(OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver
- @ConditionalOnBean(类型:org.springframework.web.servlet.View; SearchStrategy:全部)未找到bean (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver
- @ConditionalOnBean(类型:org.springframework.web.servlet.View; SearchStrategy:全部)未找到bean(OnBeanCondition)
WebSocketAutoConfiguration
- 必需的@ConditionalOnClass类未找到:org.springframework.web.socket.WebSocketHandler(OnClassCondition)
java.lang.reflect在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)
在sun.reflect.DelegatingMethodAccessorImpl.invoke .InvocationTargetException
(来源不明)
在java.lang.reflect.Method .invoke(未知源)
在org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
在java.lang.Thread.run(未知源)
导致通过:org.springframework.beans.factory.BeanCreationException:创建名为'userDao'的bean时出错:注入持久依赖失败;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有在[org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:356)$ b中定义[javax.persistence.EntityManagerFactory]类型的限定bean
$ b at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1180)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java :300)
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(Defau ltSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean( AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:660)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext。的java:760)$在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482 b $ b)
。在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:
at org.springframework.boot.SpringApplication.run(SpringApplication.java:552)
at org.springframework.boot.SpringApplication.run(SpringApplication.j ava:293)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:749)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:738)
在com.cloudfordev.controlpanel.Application.main(Application.java:14)
... 6 more
导致:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有合格的bean类型[javax .persistence.EntityManagerFactory]在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:559)处定义
$ or $
在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory (PersistenceAnnotationBeanPostProcessor.java:515)
在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor $ PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:682)
在org.sprin gframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor $ PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:655)
at org.springframework.beans.factory.annotation.InjectionMetadata $ InjectedElement.inject(InjectionMetadata.java:150)
在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:353)
... 22 more
这就是我的应用程序的启动方式:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String [] args){
SpringApplication.run(Application.class,args);
当我的Spring控制器处理连接时:
@Controller
public class GetController {
$ b $ private UserService userService;
@Autowired
public void setUserService(UserService userService){
this.userService = userService;
}
@RequestMapping(value =/ user,method = RequestMethod.GET)
public @ResponseBody User getUser(@RequestParam(value =id,required = true)int id){
User user = null;
user = userService.getUser(id);
返回用户;
$ / code $ / pre
$ b $ p 它在userService上执行getUser: @Component
public class UserService {
$ b $ private UserDAO UserDao;
public UserDAO getUserDao(){
return UserDao;
}
@Autowired
public void setUserDao(UserDAO UserDao){
this.UserDao = UserDao;
$ b $ public User getUser(int id){
return getUserDao()。load(id);
$ / code>
其中使用userDao查找实体:
@Repository(userDao)
@Transactional(propagation = Propagation.REQUIRED)
public class UserDAO {
@PersistenceContext
私人EntityManager entityManager;
public void insert(User user){
entityManager.persist(user);
public UserManager(int id){
return entityManager.find(User.class,id);
$ b我有以下的spring-config.xml in / src / main / resources:
<?xml version =1.0encoding =UTF-8?>
< beans xmlns =http://www.springframework.org/schema/beans
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instancexmlns :aop =http://www.springframework.org/schema/aop
xmlns:context =http://www.springframework.org/schema/contextxmlns:tx =http:// www.springframework.org/schema/tx
xsi:schemaLocation =http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/ spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http:// www .springframework.org / schema / tx
http://www.springframework.org/schema/tx/spring-tx.xsd\">
< context:component-scan base-package =com.mydomain.orm/>
< bean id =entityManagerFactoryclass =org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean>
< property name =persistenceXmlLocationvalue =classpath:/persistence.xml/>
< property name =persistenceUnitNamevalue =userPersistenceUnit/>
< property name =dataSourceref =dataSource/>
< property name =jpaVendorAdapterref =jpaVendorAdapter/>
< property name =jpaDialectref =jpaDialect/>
< / bean>
< bean id =jpaVendorAdapterclass =org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
< property name =databasePlatformvalue =org.hibernate.dialect.HSQLDialect/>
< / bean>
< bean id =jpaDialectclass =org.springframework.orm.jpa.vendor.HibernateJpaDialect/>
< bean id =transactionManagerclass =org.springframework.orm.jpa.JpaTransactionManager>
< property name =entityManagerFactoryref =entityManagerFactory/>
< property name =dataSourceref =dataSource/>
< property name =jpaDialectref =jpaDialect/>
< / bean>
< tx:注解驱动的事务管理器=transactionManager/>
< bean id =dataSourceclass =org.springframework.jdbc.datasource.DriverManagerDataSource>
< property name =driverClassNamevalue =org.postgresql.Driver/>
< property name =urlvalue =jdbc:postgresql:// localhost:5432 / mydb/>
< property name =usernamevalue =my_user/>
< property name =passwordvalue =/>
< / bean>
< / beans>
最后但并非最不重要的是/src/main/resources/persistence.xml:
<?xml version =1.0encoding =UTF-8?>
< persistence xmlns =http://java.sun.com/xml/ns/persistence
version =1.0>
< persistence-unit name =userPersistenceUnittransaction-type =RESOURCE_LOCAL>
< class> com.mydomain.orm.User< / class>
< / persistence-unit>
< /余辉>
我需要做些什么来解决这个错误?
解决方案您需要注入一个 EntityManager
在现场没有任何注射注释,而工厂在任何情况下都是错误的限定符。使用 @PersistenceContext
注释您的字段,如果需要,使用 unitName
来区分多个持久性单元。
回答已编辑的问题:您的XML文件没有包含在内,因为您从 Application
类开始,并且Spring紧跟在 @ComponentScan
之后。将此导入添加到 Application
类(或任何扫描的 @Configuration
类):
@ImportResource(classpath:spring-config.xml)
或者,您可以将XML配置迁移到JavaConfig格式,Spring将进行组件扫描。
I'm using Spring-boot, so a war deployed in Tomcat 7. When I start the app I get the following:
Dec 30, 2013 7:41:06 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'dispatcherServlet'
2013-12-30 19:41:06 INFO DispatcherServlet:461 - FrameworkServlet 'dispatcherServlet': initialization started
2013-12-30 19:41:06 INFO SimpleUrlHandlerMapping:315 - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2013-12-30 19:41:06 INFO RequestMappingHandlerMapping:181 - Mapped "{[/user],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public com.cloudfordev.controlpanel.orm.User com.cloudfordev.controlpanel.GetController.getUser(int)
2013-12-30 19:41:07 INFO SimpleUrlHandlerMapping:315 - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2013-12-30 19:41:07 INFO SimpleUrlHandlerMapping:315 - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2013-12-30 19:41:08 INFO DispatcherServlet:480 - FrameworkServlet 'dispatcherServlet': initialization completed in 1957 ms
Dec 30, 2013 7:41:08 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Dec 30, 2013 7:41:08 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 30, 2013 7:41:08 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-nio-8080"]
Dec 30, 2013 7:41:08 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-nio-8080"]
Dec 30, 2013 7:41:08 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Tomcat
Dec 30, 2013 7:41:08 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-nio-8080"]
Dec 30, 2013 7:41:08 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-nio-8080"]
2013-12-30 19:41:08 INFO AutoConfigurationReportLoggingInitializer$AutoConfigurationReportLogger:108 -
=========================
AUTO-CONFIGURATION REPORT
=========================
Positive matches:
-----------------
MessageSourceAutoConfiguration
- @ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: all) found no beans (OnBeanCondition)
PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer
- @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) found no beans (OnBeanCondition)
DataSourceAutoConfiguration
- @ConditionalOnClass classes found: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
- @ConditionalOnClass classes found: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration
- @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
- @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
JpaBaseConfiguration.JpaWebConfiguration
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- SpEL expression on org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration: #{true} (OnExpressionCondition)
DispatcherServletAutoConfiguration
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
- @ConditionalOnBean (types: org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; SearchStrategy: all) found the following [tomcatEmbeddedServletContainerFactory] (OnBeanCondition)
DispatcherServletAutoConfiguration#dispatcherServlet
- no DispatcherServlet found (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
EmbeddedServletContainerAutoConfiguration
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat (OnClassCondition)
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat (OnClassCondition)
- @ConditionalOnMissingBean (types: org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; SearchStrategy: current) found no beans (OnBeanCondition)
ServerPropertiesAutoConfiguration#serverProperties
- @ConditionalOnMissingBean (types: org.springframework.boot.context.embedded.properties.ServerProperties; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annota
tion.WebMvcConfigurerAdapter (OnClassCondition)
- found web application StandardServletEnvironment (OnWebApplicationCondition)
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annota
tion.WebMvcConfigurerAdapter (OnClassCondition)
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration#hiddenHttpMethodFilter
- @ConditionalOnMissingBean (types: org.springframework.web.filter.HiddenHttpMethodFilter; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) found no beans (OnBeanCondition)
Negative matches:
-----------------
RabbitAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.amqp.rabbit.core.RabbitTemplate,com.rabbitmq.client.Channel (OnClassCondition)
AopAutoConfiguration
- required @ConditionalOnClass classes not found: org.aspectj.lang.annotation.Aspect,org.aspectj.lang.reflect.Advice (OnClassCondition)
BatchAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.batch.core.launch.JobLauncher (OnClassCondition)
JpaRepositoriesAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.data.jpa.repository.JpaRepository (OnClassCondition)
MongoRepositoriesAutoConfiguration
- required @ConditionalOnClass classes not found: com.mongodb.Mongo,org.springframework.data.mongodb.repository.MongoRepository (OnClassCondition)
DataSourceAutoConfiguration.DbcpConfiguration
- org.apache.commons.dbcp.BasicDataSource DataSource class not found (DataSourceAutoConfiguration.BasicDatabaseCondition)
DataSourceAutoConfiguration.EmbeddedConfiguration
- no embedded database detected (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration
- no existing bean configured database (DataSourceAutoConfiguration.DatabaseCondition)
DataSourceAutoConfiguration.TomcatConfiguration
- org.apache.tomcat.jdbc.pool.DataSource DataSource class not found (DataSourceAutoConfiguration.TomcatDatabaseCondition)
DataSourceTransactionManagerAutoConfiguration#transactionManager
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found no beans (OnBeanCondition)
JmsTemplateAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.jms.core.JmsTemplate,javax.jms.ConnectionFactory (OnClassCondition)
DeviceResolverAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.mobile.device.DeviceResolverHandlerInterceptor,org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver (OnClassCondition)
HibernateJpaAutoConfiguration
- @ConditionalOnClass classes found: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,org.springframework.transaction.annotation.EnableTransactionManagement,javax.persistence.EntityManager,org.hibernate.ejb.HibernateEntityManager (OnClassCondition)
- @ConditionalOnClass classes found: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,org.springframework.transaction.annotation.EnableTransactionManagement,javax.persistence.EntityManager,org.hibernate.ejb.HibernateEntityManager (OnClassCondition)
- @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found no beans (OnBeanCondition)
ReactorAutoConfiguration
- required @ConditionalOnClass classes not found: reactor.spring.context.config.EnableReactor (OnClassCondition)
ThymeleafAutoConfiguration
- required @ConditionalOnClass classes not found: org.thymeleaf.spring3.SpringTemplateEngine (OnClassCondition)
EmbeddedServletContainerAutoConfiguration.EmbeddedJetty
- required @ConditionalOnClass classes not found: org.eclipse.jetty.server.Server,org.eclipse.jetty.util.Loader (OnClassCondition)
MultipartAutoConfiguration
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver (OnClassCondition)
- @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver (OnClassCondition)
- @ConditionalOnBean (types: javax.servlet.MultipartConfigElement; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver
- @ConditionalOnBean (types: org.springframework.web.servlet.View; SearchStrategy: all) found no beans (OnBeanCondition)
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver
- @ConditionalOnBean (types: org.springframework.web.servlet.View; SearchStrategy: all) found no beans (OnBeanCondition)
WebSocketAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.web.socket.WebSocketHandler (OnClassCondition)
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:356)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1180)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:660)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:552)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:293)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:749)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:738)
at com.cloudfordev.controlpanel.Application.main(Application.java:14)
... 6 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:559)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:515)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:682)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:655)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:353)
... 22 more
This is how my Application boots:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
When my Spring controller handles the connection:
@Controller
public class GetController {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping(value = "/user", method = RequestMethod.GET)
public @ResponseBody User getUser(@RequestParam(value="id", required=true) int id) {
User user = null;
user = userService.getUser(id);
return user;
}
}
It does a getUser on the userService:
@Component
public class UserService {
private UserDAO UserDao;
public UserDAO getUserDao() {
return UserDao;
}
@Autowired
public void setUserDao(UserDAO UserDao) {
this.UserDao = UserDao;
}
public User getUser(int id) {
return getUserDao().load(id);
}
}
Which uses the userDao to find the entity:
@Repository("userDao")
@Transactional(propagation=Propagation.REQUIRED)
public class UserDAO {
@PersistenceContext
private EntityManager entityManager;
public void insert(User user) {
entityManager.persist(user);
}
public User load(int id) {
return entityManager.find(User.class, id);
}
}
I have the following spring-config.xml in /src/main/resources:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.mydomain.orm" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:/persistence.xml" />
<property name="persistenceUnitName" value="userPersistenceUnit" />
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="jpaDialect" ref="jpaDialect" />
</bean>
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="HSQL" />
<property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />
</bean>
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect" ref="jpaDialect" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/mydb" />
<property name="username" value="my_user" />
<property name="password" value="" />
</bean>
</beans>
And last but not least the following /src/main/resources/persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">
<persistence-unit name="userPersistenceUnit" transaction-type="RESOURCE_LOCAL" >
<class>com.mydomain.orm.User</class>
</persistence-unit>
</persistence>
What do I need to do to resolve this error?
解决方案 You're wanting an EntityManager
injected, but you don't have any injection annotations on the field, and "factory" is the wrong qualifier in any case. Annotate your field with @PersistenceContext
, using unitName
if needed to distinguish between multiple persistence units.
Answer to edited question: Your XML file isn't getting included, because you start from the Application
class, and Spring just follows the @ComponentScan
from there. Add this import to your Application
class (or any scanned @Configuration
class):
@ImportResource("classpath:spring-config.xml")
Alternately, you can migrate your XML configuration to the JavaConfig format, which Spring will component-scan.
这篇关于Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!