назначить объект для модуля постоянства (spring-boot, spring-data-jpa) - PullRequest
0 голосов
/ 15 апреля 2020

Мне нужно поддерживать два подключения к базе данных. Из-за устаревших причин должна быть возможность настроить во внешнем файле, какая база данных содержит какую таблицу.

При использовании 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>

Сущности При необходимости я могу быть переставлен между постоянными модулями.

Я знаю параметры источника данных, и у меня есть список Entites, который должен быть назначен второму модулю. Все остальное идет в первый блок.

До сих пор я не нашел способа при весенней загрузке назначить Entity.class для LocalContainerEntityManagerFactoryBean , все, что я нашел, было основано на пакетах , Если нет другого способа, я помещу все сущности в отдельный пакет, но обычно есть менее уродливое решение, которое я не вижу.

1 Ответ

0 голосов
/ 21 апреля 2020

Я нашел кого-то с подобной проблемой. Решение, которое он описал, работает и для меня. Это все еще уродливо, потому что мне пришлось копировать / дублировать несколько классов из весны. Таким образом, выбранный способ не был предназначен.

Способ назначения сущностей во время выполнения:

 @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 - Как программно установить базовые пакеты JpaRepository

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...