将实体分配给持久性单元(spring-boot,spring-data-jpa)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将实体分配给持久性单元(spring-boot,spring-data-jpa)相关的知识,希望对你有一定的参考价值。

我需要支持两个数据库连接。由于遗留原因,必须可以在一个外部文件中配置哪个数据库包含哪个表。

使用JEE,我将拥有一个像这样的持久性单元

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
    http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="unit-one">
        <class>com.example.io.jpa.Vpt</class>
        <class>com.example.io.jpa.Azg</class>
        <class>com.example.io.jpa.Aus</class>
        <class>com.example.io.jpa.Txt</class>
        <class>com.example.io.jpa.Aco</class>
        <class>com.example.io.jpa.Aks</class>
        <class>com.example.io.jpa.Apr</class>
        <class>com.example.io.jpa.Aie</class>
    </persistence-unit>

    <persistence-unit name="unit-two">
        <class>com.example.io.jpa.Vif</class>
        <class>com.example.io.jpa.Vid</class>
    </persistence-unit>

</persistence>

实体可以根据需要在持久性单元之间重新排列。

我知道数据源参数,并且我有一个必须分配给第二单元的实体列表。其他所有内容都进入单元一。

到目前为止,我还没有在Spring Boot中找到一种方法来将Entity.class分配给LocalContainerEntityManagerFactoryBean,我发现的所有内容都是基于包的。如果没有其他方法,我会将所有实体放在单独的程序包中,但是通常看不到一个不太丑的解决方案。

答案

我发现有人遇到类似问题。他描述的解决方案也对我有用。这仍然很丑陋,因为我必须从春季开始复制/复制几个班级。因此,选择的方式不应该是。

在运行时分配实体的方法是:

 @Bean(name = "someEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean someEntityManagerFactory(
          EntityManagerFactoryBuilder builder) 
      return builder
              .dataSource(tradingDataSource())
              .packages("com.example.db.model.pkgtable1",
                  "com.example.db.model.pkgtable2",
                  "com.example.db.model.pkgtable3"
                  )
              .build();
  

仍然需要它自己的程序包中的每个实体。

但是实际上这只是一半。我们对存储库有同样的问题。如何解决这个问题,可以在这里找到:

Spring Data JPA - How to programmatically set JpaRepository base packages

以上是关于将实体分配给持久性单元(spring-boot,spring-data-jpa)的主要内容,如果未能解决你的问题,请参考以下文章

如何在Spring-boot中向控制器发送一个单元的id

当persistence.xml存在时,为啥持久性单元命名为null

实体框架:将实体分配给另一个实体的属性

Hibernate - 已经持久化的孩子的“分离实体传递给持久化”错误

有没有办法将分离的对象传递给 JPA 持久化? (分离的实体传递给坚持)

基于spring-boot的应用程序的单元测试方案