简体   繁体   English

Sprint引导数据JPA:没有类型为'java.util.Set <javax.persistence.EntityManager>'的限定bean

[英]Sprint Boot Data JPA: No qualifying bean of type 'java.util.Set<javax.persistence.EntityManager>' available

I am unable to get started with spring-boot-starter-data-jpa . 我无法开始使用spring-boot-starter-data-jpa I've created a simple Spring Boot app following this guide , but with Hibernate and related config. 我按照本指南创建了一个简单的Spring Boot应用程序,但是使用了Hibernate和相关的配置。

build.gradle: 的build.gradle:

dependencies {
    // Spring stuff
    compile 'org.springframework.boot:spring-boot-starter-data-jpa:1.5.1.RELEASE'
    compile 'org.springframework.data:spring-data-jpa'
    compile 'org.springframework:spring-webmvc'
    // Jackson
    compile 'com.fasterxml.jackson.core:jackson-databind:+'
    compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:+'
    // Postgres
    compile 'org.postgresql:postgresql:+'
    // Hibernate
    compile 'org.hibernate:hibernate-core:5.2.8.Final'
}

Whenever I try to run the app, I end up with the following: 每当我尝试运行应用程序时,我最终会得到以下结果:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-02-24 16:20:27.710 ERROR 1070 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jpaContext': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.Set<javax.persistence.EntityManager>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at nl.eonics.cdaas.service.Application.main(Application.java:14) [main/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.Set<javax.persistence.EntityManager>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    ... 23 common frames omitted

I have seen this bug (which is reportedly fixed as of 1.10.7) but downgrading spring-data-jpa to 1.9.x didn't help, I still got the same error. 我已经看到了这个错误 (据报道已经修复了1.10.7)但是将spring-data-jpa降级到1.9.x并没有帮助,我仍然遇到了同样的错误。

Any ideas? 有任何想法吗?

The problem is in hibernate-core . 问题在于hibernate-core Removing it from dependencies resolves the issue. 从依赖项中删除它可以解决问题。

I had the same problem when using Spring Boot 2.0.3-RELEASE with Hibernate/JPA with PostgreSQL 10. I had the following configuration for JPA: 使用Spring Boot 2.0.3-RELEASE和Hibernate / JPA和PostgreSQL 10时遇到了同样的问题。我对JPA有以下配置:

@EnableJpaRepositories
public class DomainConfiguration {

   @Value("${database.password}")
   private String password;

   @Value("${database.url}")
   private String url;

   @Value("${database.username}")
   private String userName;

   @Bean
   public DataSource dataSource() {
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName(Driver.class.getCanonicalName());
      dataSource.setUrl(this.url);
      dataSource.setUsername(this.userName);
      dataSource.setPassword(this.password);
      return dataSource;
   }

   @Bean
   @DependsOn("flyway")
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

      HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      vendorAdapter.setGenerateDdl(false);

      LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
      factory.setJpaVendorAdapter(vendorAdapter);
      factory.setJpaDialect(new HibernateJpaDialect());
      factory.setPersistenceUnitName("MTH");
      factory.setPackagesToScan("nl.mth.sync.domain");
      factory.setDataSource(dataSource());
      return factory;
   }

   @Bean
   public Flyway flyway(DataSource dataSource) {
      log.debug("--- configurating flyway ---");
      Flyway fly = new Flyway();
      fly.setDataSource(dataSource);
      fly.migrate();
      return fly;
   }

   @Bean
   public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
      JpaTransactionManager txManager = new JpaTransactionManager();
      txManager.setEntityManagerFactory(entityManagerFactory);
      return txManager;
   }

And I fixed the issue by adding the following method: 我通过添加以下方法修复了该问题:

   @Bean
   public EntityManager entityManager(LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean) {
      return localContainerEntityManagerFactoryBean.getObject().createEntityManager();
   }

It can be solved by adding as argument to the notation the following: 它可以通过在表示法中添加以下参数来解决:

@SpringBootApplication

This would be in the main method: 这将是主要方法:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 没有类型为&#39;java.util.Set的合格bean <javax.persistence.EntityManager> &#39;Spring Boot 2.0.2 - No qualifying bean of type 'java.util.Set<javax.persistence.EntityManager>' Spring Boot 2.0.2 没有可用的&#39;javax.persistence.EntityManager&#39;类型的合格Bean: - No qualifying bean of type 'javax.persistence.EntityManager' available: 没有类型为[javax.persistence.EntityManager]的限定bean - No qualifying bean of type [javax.persistence.EntityManager] 没有'javax.persistence.EntityManager'类型的限定bean可用:期望的单个匹配bean但找到2 - No qualifying bean of type 'javax.persistence.EntityManager' available: expected single matching bean but found 2 在Spring Boot 2中使用Entity Manager时,没有类型为&#39;javax.persistence.EntityManager&#39;的合格Bean - No qualifying bean of type 'javax.persistence.EntityManager' when using Entity Manager with spring boot 2 导入 jar 依赖项时,没有可用的“javax.persistence.EntityManager”类型的合格 bean - No qualifying bean of type 'javax.persistence.EntityManager' available when import jar dependency 没有定义类型为[javax.persistence.EntityManager]的唯一bean - No unique bean of type [javax.persistence.EntityManager] is defined Weblogic 没有 [javax.persistence.EntityManager] 类型的唯一 bean - Weblogic No unique bean of type [javax.persistence.EntityManager] 无法解析“javax.persistence.EntityManager”的 bean - Unable to resolve a bean for 'javax.persistence.EntityManager' Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory - Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM