Hibernate / JPA: отображение сущностей в разные базы данных - PullRequest
6 голосов
/ 18 августа 2010

У меня есть приложение, которое управляет 3 базами данных. Я использую hibernate с JPA на фреймворке шва.

Итак, у меня есть файл persitence.xml с тремя единицами persitence, такими как я (я удаляю свойства для db2 и 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>

В моем файле seam components.xml я создаю 3 управляемых-постоянных контекста для сопоставления шва с моей конфигурацией гибернации.

Наконец, у меня есть несколько сущностей, и моя проблема здесь. Мне нужно сохранить некоторые сущности в db2 и другие в db3. Таким образом, схема базы данных отличается, и когда я развертываю свое приложение, я получаю эту ошибку:

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

Поскольку таблица PORTAILPERMISSION не существует в db2.

Мой вопрос:

Как указать в классе сущности, какую базу данных (или единицу измерения) следует использовать для проверки сущности при запуске?

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 18 августа 2010

Вы пытаетесь явно перечислить классы (<class>..</class>) в каждой единице персистентности. И используйте

<exclude-unlisted-classes>true</exclude-unlisted-classes>
...