gpt4 book ai didi

java - hibernate/JPA : Mapping entities to different databases

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:24 25 4
gpt4 key购买 nike

我有一个管理 3 个数据库的应用程序。我在 seam 框架上使用带 JPA 的 hibernate 。

所以我有一个包含三个持久单元的 persitence.xml 文件(我删除了 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。

我的问题是:

如何在实体类中指定在启动时必须使用什么数据库(或持久性单元)来验证实体?

感谢您的帮助。

最佳答案

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

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

关于java - hibernate/JPA : Mapping entities to different databases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3511056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com