当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中获取EntityManager的句柄

宁欣怿
2023-03-14

是否有任何方法可以获取给定实体对象的EntityManager句柄?我将spring boot 1.2.3与JPA starter一起使用,并使用配置进一步明确配置多个数据源

我检查了[解决]SPRING BOOT访问entityManager,它似乎没有回答这个问题。

谢谢。

编辑:我添加了如何定义数据源的说明:

@Component
@Configuration
public class DataSources {
    @Bean
    @Primary
    @ConfigurationProperties(prefix="first.datasource")
    public DataSource getPrimaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix="second.datasource")
    public DataSource getSecondDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix="third.final.datasource")
    public DataSource getThirdFinalDataSource() {
        return DataSourceBuilder.create().build();
    }
}

在我的应用程序中。yml我有以下部分

first.datasource:
  name: 'first_datasource',
  #other attributes...
second.datasource:
  name: 'second_datasource',
  #other attributes...
third.final.datasource:
  name: 'first_datasource',
  #other attributes...

到目前为止,我已经尝试了@Stephane的两个建议,但我没有得到任何uchbeandefinitionexception

假设我的实体名为客户然后我尝试了

@Service
public class FooService {

    private final EntityManager entityManager;

    @Autowired
    public FooService(@Qualifier("customerEntityManager") EntityManager entityManager) {
        ...
    }

}

但我也试过了

@PersistenceContext(unitName = "customer") // also tried "customers" and "first_datasource"
private EntityManager entityManager;

没有运气。

共有1个答案

史钊
2023-03-14

这取决于您如何配置它,但您是否尝试过在EntityManager中注入与创建它的工厂相对应的限定符?

这里是一个带有两个数据源的示例项目。如果要为order注入EntityManager,只需在项目的任何Springbean中执行以下操作

@Service
public class FooService {

    private final EntityManager entityManager;

    @Autowired
    public FooService(@Qualifier("orderEntityManager") EntityManager entityManager) {
        ...
    }

}

对于客户,请使用customerEntityManager。

当然,您可以使用持久化单元名称,即

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

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

有关详细信息,请检查项目的配置。

 类似资料:
  • 下面是我的spring配置文件[springbeans.xml] 我的StudentDAOImpl类将实现StudentDAO接口,它将具有如下方法 最后主类

  • 我使用Spring靴,希望提高性能。我必须下载数据库中有50000个字段的文件。使用hibernate。我在批量插入中找到了解决方案。但我不知道如何从Crudepository获得entitymanager 我创建了MyStorageService并想保存我的文件: } 如果在MyStorageService中使用 我明白了 错误[http-nio-18842-exec-1]JpaTransact

  • 我只是想把字符串按降序排序。用户提供的输入为10,a,1,#,15,。,6输出必须为10,a,15,#,6,。,1我已经试过了。 在if语句中,我得到错误。错误:-操作员

  • 要获取请求URL,可以在堆栈溢出中找到以下方法。 第一种方法: 第二种方法: 第三种方法: 我不知道在spring boot应用程序中使用哪一个来获取请求URL。 如果我使用第三种方法,那么我是否需要在配置类中创建RequestContextListener的bean,如下所示?

  • 我想得到一个域名的url在我的springboot应用程序: 我曾经尝试过这样的事情: