Как динамически установить имя схемы в JPA - PullRequest
0 голосов
/ 17 февраля 2020

Я работаю с приложением, использующим технологии Java + EJB + JPA. В базе данных появилось новое изменение: имя схемы должно основываться на среде, в которой запущено приложение. На самом деле это особый тип среды UAT (клон существующего UAT), который мы настроили так, чтобы обе среды использовали базу данных UAT, но разную схему. Вот мое текущее постоянство. xml:

<persistence-unit name="db2_mydb" transaction-type="JTA">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>java:app/env/jdbc/myapp</jta-data-source>
    <properties>
                <property name="openjpa.jdbc.DBDictionary" value="JoinSyntax=sql92, DisableAlterSeqenceIncrementBy=true" />
                <property name="openjpa.jdbc.Schema" value="SCHEMA_X" />
                <property name="openjpa.Log" value="log4j" />
                <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true" />
                <property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
                <property name="openjpa.ConnectionRetainMode" value="transaction" />
                <property name="openjpa.jdbc.DBDictionary" value="JoinSyntax=sql92" />
                <property name="openjpa.jdbc.TransactionIsolation" value="read-committed"/>
                <property name="openjpa.DetachState" value="all(DetachedStateManager=true)"/>
    </properties>
</persistence-unit>

Я ввожу менеджер сущностей, используя имя единицы персистенции db2_mydb в классе уровня данных. В Java у меня есть информация о среде, X или Y, на основании которой я должен использовать схему SCHEMA_X или SCHEMA_Y. Как я могу достичь этого. У меня нет идеи сделать это динамично c. Я использую OpenJPA в качестве реализации.

...