Hibernate/JPA:将实体映射到不同的数据库

6

我有一个应用程序,管理着3个数据库。我使用Seam框架上的JPA和Hibernate。

因此,我有一个像这样的persitence.xml文件,其中包含三个persitence-unit(我删除了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个managed-persistence-context来将seam与我的hibernate配置映射。

最后,我有几个实体,我的问题就在这里。我需要将一些实体持久化到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

因为在db2中不存在表PORTAILPERMISSION。
我的问题是:
如何在实体类中指定要使用哪个数据库(或持久化单元)在启动时验证实体?
感谢您的帮助。
1个回答

4

在每个持久性单元中,您尝试显式列出类(<class>..</class>)。并使用

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

我该如何关闭自动检测? - Kiva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接