2010-08-18 9 views
6

Ich habe eine Anwendung, die 3 Datenbanken verwaltet. Ich benutze Hibernate mit JPA auf Naht Rahmen.Hibernate/JPA: Mappen von Entitäten zu verschiedenen Datenbanken

So habe ich eine persitence.xml Datei mit drei persitence-Einheit wie folgt aus (I entfernen Eigenschaften für db2 und db3):

<persistence-unit name="db1" transaction-type="JTA" > 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>db1source</jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" 
      value="org.hibernate.dialect.Oracle10gDialect" /> 
     <property name="hibernate.connection.driver_class" 
      value="oracle.jdbc.driver.OracleDriver" /> 
     <property name="hibernate.hbm2ddl.auto" value="validate" /> 
     <property name="hibernate.show_sql" value="false" /> 
     <property name="hibernate.format_sql" value="true" /> 
     <property name="hibernate.default_schema" value="SI_TEC" /> 
     <property name="hibernate.validator.apply_to_ddl" value="false" /> 
     <property name="hibernate.transaction.manager_lookup_class" 
      value="org.hibernate.transaction.WeblogicTransactionManagerLookup" /> 
    </properties> 
</persistence-unit> 

<persistence-unit name="db2" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>d2source</jta-data-source> 
</persistence-unit> 

<persistence-unit name="db3" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>d3source</jta-data-source> 
</persistence-unit> 

In meiner Naht components.xml Datei, ich erstellen 3 verwaltet-Persistenz -Kontext, um die Nahtstelle mit meiner Winterschlafkonfiguration zu kartieren.

Endlich habe ich mehrere Entitäten und mein Problem ist hier. Ich muss einige Entitäten in db2 und andere in db3 beibehalten. So Datenbank-Schema ist unterschiedlich und wenn ich meine Anwendung bereitstellen, bekomme ich diesen Fehler:

org.hibernate.HibernateException: Missing table: PORTAILPERMISSION 
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1113) 
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139) 
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:349) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 
    Truncated. see log file for complete stacktrace 

Da der Tisch PORTAILPERMISSION nicht in db2 existiert.

Meine Frage ist:

Wie in Entity-Klasse angeben, welche Datenbank (oder persitence-Einheit) müssen Unternehmen in Start zu validieren verwendet werden?

Danke für Ihre Hilfe.

Antwort

4

Sie versuchen, Klassen (<class>..</class>) in jeder Persistenzeinheit explizit aufzulisten. Und verwenden Sie

<exclude-unlisted-classes>true</exclude-unlisted-classes> 
+0

Wie kann ich die automatische Erkennung ausschalten? – Kiva

+0

@Kiva siehe mein Update – Bozho

+0

Danke, ich füge das hinzu und alles funktioniert gut :) – Kiva

Verwandte Themen