JPA с использованием нескольких схем базы данных - PullRequest
25 голосов
/ 19 августа 2009

У меня небольшая проблема с одной конкретной проблемой с использованием JPA / Spring:

Как я могу динамически назначить схему объекту?

У нас есть TABLE1, которая принадлежит схеме AD, и TABLE2, которая находится под BD.

@Entity
@Table(name = "TABLE1", schema="S1D")
...

@Entity
@Table(name = "TABLE2", schema="S2D")
...

Схемы не могут быть жестко закодированы в атрибуте аннотации, поскольку это зависит от среды (Dev / Acc / Prd). (Приемлемыми являются схемы S1A и S2A)

Как мне этого добиться? Можно ли указать какие-то заполнители, подобные этому:

@Entity
@Table(name = "TABLE1", schema="${schema1}")
...

@Entity
@Table(name = "TABLE2", schema="${schema2}")
...

чтобы схемы заменялись на основе файла свойств, находящегося в среде?

Приветствия

Ответы [ 6 ]

10 голосов
/ 21 февраля 2011

У меня была та же проблема, которую я решил, с помощью файла persistence.xml, в котором я ссылаюсь на необходимые файлы orm.xml, я объявил db shema

<persistence
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" >
<persistence-unit name="schemaOne">
    . . .
    <mapping-file>ormOne.xml</mapping-file>
    . . .
</persistence-unit>

<persistence-unit name="schemaTwo">
    . . .
    <mapping-file>ormTwo.xml</mapping-file>
    . . .
 </persistence-unit>
</persistence>

теперь вы можете создать EntityManagerFactory для вашей специальной схемы

EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");
2 голосов
/ 12 декабря 2013

Попробуйте следующее:

puplic class MyClass {
  public static final String S1D="S1D";
  public static final String S2D="S2D";
}

@Entity
@Table(name = "TABLE1", schema=MyClass.S1D)
...

@Entity
@Table(name = "TABLE2", schema=MyClass.S2D)
...
2 голосов
/ 19 августа 2009

Одна вещь, которую вы можете сделать, если вы знаете, при развертывании, это иметь 2 файла orm.xml. Один для schema1 и один для schema2, а затем в файле persistence.xml определены 2 единицы постоянства. Размещение аннотаций - это анти-шаблон, если нужно изменить такие вещи, как схема

1 голос
/ 28 мая 2014

при создании источника данных вы можете инициализировать соединение для использования другой схемы

например. для weblogic

Укажите схему по умолчанию для пула JDBC в weblogic / oracle

1 голос
/ 09 октября 2009

Вы можете иметь два объявления DataSource (по одному для каждой схемы) в вашем context.xml и определить два постоянных блока, используя эти источники данных. В этом случае context.xml может отличаться на серверах приложений разных сред.

0 голосов
/ 26 августа 2009

Аргументы аннотации должны быть окончательными и поэтому не могут быть изменены во время выполнения.

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