Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory [英] Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory

查看:174
本文介绍了Spring JPA(Hibernate)没有类型的限定bean: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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆