JPA - EntityManagerFactory - Zwei Datenbankschemata

Wüßte nicht, warum nicht. Du mußt halt beide connect Infos in der persistence.xml ablegen aund die namen der units beim Anlegen der EMF mitgeben.

Gruß
 
das habe ich gemacht. beim instanziieren der 2. factory kommt folgende fehlermeldung:

INFO - table not found: s_adresse_etrangere
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: Missing sequence or table: s_adresse_etrangere
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:737)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at lu.cc.formInitiale.file.CsvReader.main(CsvReader.java:17)
Caused by: org.hibernate.HibernateException: Missing sequence or table: s_adresse_etrangere
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1094)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:317)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)
... 4 more

die tabelle, die da angemeckert wird, ist eine sequence des 1. datenbankschemas.

meine persistence.xml sieht so aus:

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="formInitiale" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.connection.username" value="bla" />
<property name="hibernate.connection.password" value="blub" />
<property name="hibernate.connection.url" value="jdbc:eek:racle:thin:mad:1.0.2.1:1521:db" />

<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.format_sql" value="true"/>

<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="300"/>
<property name="hibernate.c3p0.max_statements" value="50"/>
</properties>
</persistence-unit>
<persistence-unit name="rchCom" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>

<properties>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.connection.username" value="laber" />
<property name="hibernate.connection.password" value="rabarber" />
<property name="hibernate.connection.url" value="jdbc:eek:racle:thin:mad:1.0.2.1:1521:db" />

<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.format_sql" value="true"/>

<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="300"/>
<property name="hibernate.c3p0.max_statements" value="50"/>
</properties>
</persistence-unit>
</persistence>

die factories erzeuge ich so:

EntityManagerFactory emfFormInitiale = Persistence.createEntityManagerFactory("formInitiale");
EntityManagerFactory emfRchCom = Persistence.createEntityManagerFactory("rchCom");
 
stimmt, er muss ja wissen, welchem schema / persistence-unit eine Entity zugewiesen ist..
So ricvhtig fällt mir da nichts ein. allerdings 'sollte' es gehen wenn Du Objekte lädst/speicherst, da Du dann ja angibst mit welchem EM du arbeitest. Ich vermute mal, das die Fehlermeldung nur dadurch zustande kommt, das Du
Code:
<property name="hibernate.hbm2ddl.auto" value="validate" />
gestellt hast. Ohne dem könnte es eventuell gehen.

Oder Du guckst mal ob man das irgendwie einer entity mitgeben kann [1]

[1] http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html

Gruss
 
Kritisches Thema bei Oracles sind auch immer die Zugriffsrechte auf Sequences / Tabellen. Wenn man die nicht hat kommt clevererweise genau diese Fehlermeldung anstelle von nem "Access denied" oder so. Das könnte es also auch sein...

Gruß
Ollie
 
Ich vermute mal, das die Fehlermeldung nur dadurch zustande kommt, das Du
Code:
<property name="hibernate.hbm2ddl.auto" value="validate" />
gestellt hast. Ohne dem könnte es eventuell gehen.

hey torax!

dein tip hat mir sehr weiter geholfen. ich hab das property entfernt und habe jetzt 2 EntityManagerFactories an der hand. mal schauen, wie ich weiter komme...

vielen dank schon mal!
 

Neue Beiträge

Zurück