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
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");
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
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)
...
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.
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
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.
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