没有“javax.persistence.EntityManager”类型的合格 bean 可用:预期有单个匹配 bean,但发现了 2 个

2024-07-03

我有两个单独的数据库的两个实体管理器配置,但是当我尝试自动连接实体管理器来配置我的 GraphQLExecutor bean 时,我收到一个异常,指出有两个 bean 匹配条件,即使我指定了一个单元名称在 PersistenceContext 中。

例外

org.springframework.beans.factory.BeanCreationException:错误 创建名称为“graphQLExecutor”的 bean:资源注入 依赖失败;嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:否 类型为“javax.persistence.EntityManager”的合格 bean 可用: 预期有一个匹配的 bean,但发现了 2 个: org.springframework.orm.jpa.SharedEntityManagerCreator#0,org.springframework.orm.jpa.SharedEntityManagerCreator#1 在 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321) 〜[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) 〜[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) 〜[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 〜[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE] 在 com.ogl.JpaDemoApplication.main(JpaDemoApplication.java:15) [类/:na] 造成的: org.springframework.beans.factory.NoUniqueBeanDefinitionException:否 类型为“javax.persistence.EntityManager”的合格 bean 可用: 预期有一个匹配的 bean,但发现了 2 个: org.springframework.orm.jpa.SharedEntityManagerCreator#0,org.springframework.orm.jpa.SharedEntityManagerCreator#1 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:173) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:518) 〜[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) 〜[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) 〜[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 〜[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] 在 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] ... 17 个常见的 省略帧

实体经理1

package com.ogl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@EnableJpaRepositories(basePackages = "com.ogl.system", entityManagerFactoryRef = "companyEntityManagerFactory", transactionManagerRef = "companyTransactionManager")
public class SystemJpaConfig {

  private final Environment environment;

  @Autowired
  public SystemJpaConfig(Environment environment) {
    this.environment = environment;
  }

  @Bean("systemEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean systemEntityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
    entityManagerFactoryBean.setPackagesToScan("com.ogl.system");
    entityManagerFactoryBean.setPersistenceUnitName("system");
    entityManagerFactoryBean.setDataSource(systemDataSource());

    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
    adapter.setDatabase(Database.POSTGRESQL);
    adapter.setShowSql(true);
    adapter.setGenerateDdl(false);

    entityManagerFactoryBean.setJpaVendorAdapter(adapter);

    return entityManagerFactoryBean;
  }

  @Bean
  DataSource systemDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(environment.getProperty("p4.datasource.driver"));
    dataSource.setUrl(environment.getProperty("p4.system.url"));
    dataSource.setUsername(environment.getProperty("p4.system.user"));
    dataSource.setPassword(environment.getProperty("p4.system.password"));

    return dataSource;
  }

  @Bean
  public PlatformTransactionManager systemTransactionManager() {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory((systemEntityManagerFactory().getObject()));

    return transactionManager;
  }
}

实体经理2

package com.ogl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@EnableJpaRepositories(basePackages = "com.ogl.company", entityManagerFactoryRef = "companyEntityManagerFactory", transactionManagerRef = "companyTransactionManager")
public class CompanyJpaConfig {

  private final Environment environment;

  @Autowired
  public CompanyJpaConfig(Environment environment) {
    this.environment = environment;
  }

  @Primary
  @Bean("companyEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean companyEntityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
    entityManagerFactoryBean.setPackagesToScan("com.ogl.company");
    entityManagerFactoryBean.setPersistenceUnitName("company");
    entityManagerFactoryBean.setDataSource(companyDataSource());

    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
    adapter.setDatabase(Database.POSTGRESQL);
    adapter.setShowSql(true);
    adapter.setGenerateDdl(false);

    entityManagerFactoryBean.setJpaVendorAdapter(adapter);

    return entityManagerFactoryBean;
  }

  @Bean
  DataSource companyDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(environment.getProperty("p4.datasource.driver"));
    dataSource.setUrl(environment.getProperty("p4.company.url"));
    dataSource.setUsername(environment.getProperty("p4.company.user"));
    dataSource.setPassword(environment.getProperty("p4.company.password"));

    return dataSource;
  }

  @Primary
  @Bean
  public PlatformTransactionManager companyTransactionManager() {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory((companyEntityManagerFactory().getObject()));

    return transactionManager;
  }
}

注射

package com.ogl;

import org.crygier.graphql.GraphQLExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Configuration
@ComponentScan
public class GraphQLJpaConfig {

  @PersistenceContext(unitName = "company")
  private EntityManager entityManager;

  @Bean
  public GraphQLExecutor graphQLExecutor() {
    return new GraphQLExecutor(entityManager);
  }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ogl</groupId>
    <artifactId>jpa-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>jpa-demo</name>
    <description>Demo project for JPA</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.crygier</groupId>
            <artifactId>graphql-jpa</artifactId>
            <version>0.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

您已经定义了两个实体管理器。现在你必须告诉 spring 应该注入哪一个。为此,您可以使用@Qualifier注解:

@PersistenceContext(unitName = "company")
@Qualifier(<Name of the entitimanager you want to use>)
private EntityManager entityManager;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有“javax.persistence.EntityManager”类型的合格 bean 可用:预期有单个匹配 bean,但发现了 2 个 的相关文章

随机推荐

  • 新程序员能理解的解析术语是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是一名正在获得计算机科学学位的大学生 我的很多同学确实没有做过很多编程 他们已经完成了课堂作业 但说实话 这些问题并不能真正教你如何编程 我有
  • 新程序员能理解的解析术语是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是一名正在获得计算机科学学位的大学生 我的很多同学确实没有做过很多编程 他们已经完成了课堂作业 但说实话 这些问题并不能真正教你如何编程 我有
  • php 替换数组 id 键

    我使用单个 mysql 查询为嵌套结果 类别和子类别 创建多维数组 Query SELECT categories cat title subcategories sub cat id subcategories sub cat title
  • php 替换数组 id 键

    我使用单个 mysql 查询为嵌套结果 类别和子类别 创建多维数组 Query SELECT categories cat title subcategories sub cat id subcategories sub cat title
  • Android 如何在 webview 中显示链接?

    有谁知道像这样在 webview 中显示 URL 的方法 但在这里我得到像这样这里没有焦点 没有点击选项不起作用任何事情请给我一些建议 此代码使用 webview 中的显示数据 webview getSettings setJavaScri
  • Android 如何在 webview 中显示链接?

    有谁知道像这样在 webview 中显示 URL 的方法 但在这里我得到像这样这里没有焦点 没有点击选项不起作用任何事情请给我一些建议 此代码使用 webview 中的显示数据 webview getSettings setJavaScri
  • ExtJS DateField 使用不同的显示格式

    我正在使用一个ExtJS http extjs com 日期字段 http extjs com deploy ext docs output Ext form DateField htmlASP NET MVC Web 应用程序中的控件 我
  • ExtJS DateField 使用不同的显示格式

    我正在使用一个ExtJS http extjs com 日期字段 http extjs com deploy ext docs output Ext form DateField htmlASP NET MVC Web 应用程序中的控件 我
  • node-http-proxy,如何将新的查询参数传递给初始请求?

    我正在尝试将新的查询参数添加到我的原始请求中节点 http 代理 https github com http party node http proxy 调整req query直接这样不行 app all path function req
  • node-http-proxy,如何将新的查询参数传递给初始请求?

    我正在尝试将新的查询参数添加到我的原始请求中节点 http 代理 https github com http party node http proxy 调整req query直接这样不行 app all path function req
  • 无法在 Espresso 中切换飞行模式 [重复]

    这个问题在这里已经有答案了 我正在尝试打开飞行模式奇巧版 on rooted模拟器 我正在使用 Espresso 进行自动化 并且我遇到了必须打开飞行模式并在应用程序中执行某些步骤的情况 我使用以下方法修改了时间 public static
  • 无法在 Espresso 中切换飞行模式 [重复]

    这个问题在这里已经有答案了 我正在尝试打开飞行模式奇巧版 on rooted模拟器 我正在使用 Espresso 进行自动化 并且我遇到了必须打开飞行模式并在应用程序中执行某些步骤的情况 我使用以下方法修改了时间 public static
  • Gitlab CI 每个阶段不同的执行器

    gitlab ci yml 中是否可以有 2 个阶段 一个阶段使用 docker runner 运行 另一个阶段使用 shell 运行 想象一下 我想在 docker 容器中运行测试 但我想在容器中本地的 shell 中运行部署阶段 不完全
  • Gitlab CI 每个阶段不同的执行器

    gitlab ci yml 中是否可以有 2 个阶段 一个阶段使用 docker runner 运行 另一个阶段使用 shell 运行 想象一下 我想在 docker 容器中运行测试 但我想在容器中本地的 shell 中运行部署阶段 不完全
  • gcloud 计算复制文件成功但没有出现文件

    我正在将数据从本地计算机复制到计算引擎实例 gcloud compute copy files Users me project data csv instance name project 命令运行并完成 data csv 100 74K
  • gcloud 计算复制文件成功但没有出现文件

    我正在将数据从本地计算机复制到计算引擎实例 gcloud compute copy files Users me project data csv instance name project 命令运行并完成 data csv 100 74K
  • LINQ 按“循环”顺序排序

    看起来这应该是一项简单的任务 但我不知道如何使用 LINQ 来做到这一点 到目前为止 我能找到的唯一信息是关于循环赛形式的信息 这不是我想要的 我可能搜索错了 给出以下列表 var items apple banana banana can
  • LINQ 按“循环”顺序排序

    看起来这应该是一项简单的任务 但我不知道如何使用 LINQ 来做到这一点 到目前为止 我能找到的唯一信息是关于循环赛形式的信息 这不是我想要的 我可能搜索错了 给出以下列表 var items apple banana banana can
  • 没有“javax.persistence.EntityManager”类型的合格 bean 可用:预期有单个匹配 bean,但发现了 2 个

    我有两个单独的数据库的两个实体管理器配置 但是当我尝试自动连接实体管理器来配置我的 GraphQLExecutor bean 时 我收到一个异常 指出有两个 bean 匹配条件 即使我指定了一个单元名称在 PersistenceContex
  • 没有“javax.persistence.EntityManager”类型的合格 bean 可用:预期有单个匹配 bean,但发现了 2 个

    我有两个单独的数据库的两个实体管理器配置 但是当我尝试自动连接实体管理器来配置我的 GraphQLExecutor bean 时 我收到一个异常 指出有两个 bean 匹配条件 即使我指定了一个单元名称在 PersistenceContex