JPA przy użyciu wielu schematów baz danych

Mam mały problem z jednym konkretnym problemem przy użyciu JPA / Spring:

Jak mogę dynamicznie przypisać schemat do encji?

Mamy TABLE1, który należy do schematu AD i TABLE2, który jest pod BD.

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

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

Schematy nie mogą być zakodowane na twardo w atrybucie adnotacji, ponieważ zależy to od środowiska (Dev/Acc / Prd). (W akceptacji Schematy to S1A i S2A)

Jak mogę to osiągnąć? Czy można określić jakiś rodzaj placeholders like this:

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

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

Aby Schematy były zastępowane na podstawie pliku właściwości znajdującego się w środowisku?

Cheers

Author: javacoder, 2009-08-19

6 answers

Miałem ten sam problem, który rozwiązałem z uporem.xml, w którym odwołuję się do potrzebnego orm.pliki xml wewnątrz i deklarowane 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>

Teraz możesz utworzyć EntityManagerFactory dla Twojego specjalnego schematu

EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");
 10
Author: carmen_munich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 13:38:07

Jedną rzeczą, którą możesz zrobić, jeśli wiesz, że przy wdrożeniu jest posiadanie 2 orm.pliki xml. Jeden dla schematu 1 i jeden dla schematu 2, a następnie w persistence.xml masz zdefiniowane 2 jednostki trwałości. Wstawianie adnotacji jest anty-wzorcem, jeśli trzeba zmienić takie rzeczy jak schemat

 2
Author: DataNucleus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-19 17:49:23

Spróbuj podążać za:

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
Author: user3092746,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 20:08:33

Możesz mieć dwie deklaracje DataSource (po jednej dla każdego schematu) w Twoim kontekście.xml i zdefiniuj dwie jednostki trwałości przy użyciu tych źródeł danych. Kontekst.xml może się wtedy różnić w serwerach aplikacji różnych środowisk.

 1
Author: Dominik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-09 17:50:30

Kiedy tworzysz źródło danych, możesz być w stanie zainicjować połączenie, aby użyć innego schematu

Np. dla weblogic

Określ domyślny schemat dla puli JDBC w WebLogic / oracle

 1
Author: Kalpesh Soni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:20

Argumenty adnotacji muszą być ostateczne i dlatego nie mogą być zmieniane w czasie wykonywania.

 0
Author: Nico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 12:12:27