JPA с использованием нескольких схем баз данных
У меня возникли проблемы с одной конкретной проблемой, использующей JPA/ Spring:
Как я могу динамически назначать схему сущности?
У нас ТАБЛИЦА 1, которая относится к схеме 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}")
...
чтобы заменить схемы на основе файла свойств, находящегося в среде?
Приветствия
Ответы
Ответ 1
У меня была та же проблема, что я решил, что с 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
Одна вещь, которую вы можете сделать, если вы знаете при развертывании, состоит в том, чтобы иметь 2 файла orm.xml. Один для schema1 и один для schema2, а затем в файле persistence.xml, у вас есть 2 единицы непрерывности. Помещение аннотаций - это анти-шаблон, если вам нужно изменить такие вещи, как схема
Ответ 3
Попробуйте следующее:
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)
...
Ответ 4
У вас могут быть две объявления DataSource (по одной для каждой схемы) в вашем контексте. xml и определение двух единиц сохранения, использующих эти источники данных. В этом случае context.xml может быть разным на серверах приложений в разных средах.
Ответ 5
когда вы создаете источник данных, вы можете инициализировать соединение для использования другой схемы
например. для weblogic
Укажите схему по умолчанию для пула JDBC в weblogic/oracle
Ответ 6
Аргументы аннотации должны быть окончательными и поэтому не могут быть изменены во время выполнения.
N