Hibernate Mehrfachverbindung mit Hibernate

Shibas

Mitglied
Moin,

ich habe das Problem das ich in meinen Programm eine update Methode schreiben möchte die von zwei Datenbanken die Daten raushohlt vergleichen und dann fehlende Einträge nachträgt. Jetzt hab ich aber das Problem das ich nicht wirklich vestehe wie ich einen zweite Datenbankverbindung herstellen soll.

Ich benutze für beide Datenbanken Oracle. Die verbindung wird über die Persistence und die hibernate.properties realisiert.

persistence.xml
[XML]<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_1_0.xsd"
version="1.0">
<persistence-unit name="manager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.search.lucene_version" value="LUCENE_35"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</properties>
</persistence-unit>
</persistence>[/XML]

hibernate.properties
Java:
hibernate.connection.driver_class = oracle.jdbc.OracleDriver
hibernate.connection.url = jdbc:oracle:thin:@192.168.2.130:1521/orclXDB
hibernate.connection.username = db1
hibernate.connection.password = pw1
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

Beim Aufruf benutze ich dann den EntityManager um damit meine Anfragen zu erstellen

Java:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager");
	EntityManager em = emf.createEntityManager();


Ich habe jetzt schon im internet nachgeschaut aber meistens wir es dort mit session factory deklarationen gemacht aber so wie das alles aussieht müsste ich dafür meine ganzen zugriffsmethoden und config daten ändern.

Daher meine Frage ob es eine einfache und schnelle lösung gibt meine daten umzustellen das ich zum beispiel in der persistence nur nen zweiten manager mit neuen namen anlegen muss.

mfg

Shibas
 
Du brauchst eben eine 2. Persistence Unit.

ok also

[XML]<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_1_0.xsd"
version="1.0">
<persistence-unit name="manager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.search.lucene_version" value="LUCENE_35"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</properties>
</persistence-unit>

<persistence-unit name="manager2" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.search.lucene_version" value="LUCENE_35"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</properties>
</persistence-unit>
</persistence>[/XML]

aber wie kann ich dann in den properties die zweite datenbank anbinden?

So?
Java:
hibernate.connection.driver_class = oracle.jdbc.OracleDriver
hibernate.connection.url = jdbc:oracle:thin:@192.168.2.130:1521/orclXDB
hibernate.connection.username = db1
hibernate.connection.password = pw1
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

hibernate.connection.driver_class = oracle.jdbc.OracleDriver
hibernate.connection.url = jdbc:oracle:thin:@192.168.2.146:1521:XE
hibernate.connection.username = db2
hibernate.connection.password = pw2
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

ich sehe da jetzt nicht die möglichkeit wie ich hibernate so sagen soll zu welchen manager die connection gehöhrt
 
Ok ich habs jetzt hinbekommen es reicht ja schon wenn ich einfach die verbindungsdaten in die persistence reinschreibe.

also

[XML]<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_1_0.xsd"
version="1.0">
<persistence-unit name="manager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.search.lucene_version" value="LUCENE_35"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>

<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc😱racle:thin😡192.168.2.130:1521/orclXDB"/>
<property name="hibernate.connection.username" value="db1"/>
<property name="hibernate.connection.password" value="pw1"/>
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="1800"/>
<property name="hibernate.c3p0.max_statements" value="50"/>

</properties>
</persistence-unit>


<persistence-unit name="manager2" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.search.lucene_version" value="LUCENE_35"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>

<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc😱racle:thin😡192.168.2.146:1521:XE"/>
<property name="hibernate.connection.username" value="db2"/>
<property name="hibernate.connection.password" value="pw2"/>
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="1800"/>
<property name="hibernate.c3p0.max_statements" value="50"/>

</properties>
</persistence-unit>

</persistence>[/XML]

Nochmals danke für den Tip Maki, über "multiple" "connections" "hibernate" habe ich auf google nix in der richtung gefunden was mich ein wenig wundert das es nur beispiele mit der session factory gibt aber als ich noch Persistence dazku genommen habe bin ich auf diesen post hier gekommen

jpa - No Persistence provider for EntityManager named - Stack Overflow

hat zwar nix mit meinen problem zu tun gehabt, aber so hatte ich ne lösung dafür^^

mfg

Shibas
 

Neue Themen


Zurück
Oben