гибернация с JPA для создания объекта в другой схеме - PullRequest
0 голосов
/ 19 декабря 2018

Я создал две сущности в своем коде JAVA, одна из них - сущность Account, другая - сущность AccountLog.Эти две сущности сопоставлены с соответствующей таблицей в одной и той же схеме с именем testdb.Мы используем hibernate и JPA для обработки вставки / обновления и генерации таблиц.

Поскольку проблема с производительностью, я хотел бы разделить AccountLog на другую схему с именем testdb_log.Таким образом, таблица AccountLog будет сгенерирована в схеме testdb_log, а следующее событие вставки / обновления будет сохранено в схеме testdb_log.

Каково лучшее решение для обработки вышеуказанных случаев?Добавить аннотацию @table с именем схемы?или другие?

  1. Как сгенерировать объект для другой схемы?
  2. Для этого объекта, как сохранить / обновить информацию об объекте для другой схемы?

1 Ответ

0 голосов
/ 19 декабря 2018

Я, вероятно, буду использовать разные единицы персистентности в xml персистентности, что-то вроде этого:

<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="oneschema" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <properties>
            <property name="driverClass" value="${db.driver}" />
            <property name="jdbcUrl" value="${datasource.baseurl}/SCHEMAONE" />
            <property name="user" value="${datasource.username}" />
            <property name="password" value="${datasource.password}" />
        </properties>
    </persistence-unit>
    <persistence-unit name="anotherchema" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.company.AccountLog</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="driverClass" value="${db.driver}" />
            <property name="jdbcUrl" value="${datasource.baseurl}/SCHEMANOTHER" />
            <property name="user" value="${datasource.username}" />
            <property name="password" value="${datasource.password}" />
        </properties>
    </persistence-unit>
</persistence>

Во втором блоке персистентности вы явно объявляете, какие классы принадлежат ему, поэтому менеджер сущностей будет знать, какразобраться с ними.

Схемы, соединения, пулы соединений обычно прозрачны для кода Java, поэтому вам не нужно ничего менять в Java.

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