gpt4 book ai didi

java - JPA/hibernate : schema generation with multiple persistence units

转载 作者:行者123 更新时间:2023-11-29 05:05:46 25 4
gpt4 key购买 nike

我有一个应用程序使用一组位于 2 个不同数据库中的 JPA 实体。我为它配置了多个持久化单元。

问题是我想使用模式生成自动生成模式,并且所有实体都在两个数据库中创建。

我在两个 PU 中都有:

        <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata"/>
<property name="javax.persistence.schema-generation.drop-source" value="metadata"/>

是的,我想使用元数据自动获取实体。我不想提供手动脚本,因为我需要使其与实体保持同步。

有没有办法标记哪个实体由哪个PU生成?

-edit:请注意,在@Table 上添加“schema”属性并不能解决问题,因为每个 PU 都会尝试在正确的模式中创建相同的实体,并且会出现错误,因为表已经存在.

最佳答案

是的,你可以做到。您需要列出每个持久单元下的实体,还需要使用 <exclude-unlisted-classes>true</exclude-unlisted-classes> 显式禁用未列出实体的自动发现。 .

  <!--  Unit 1 -->
<persistence-unit name="Unit1" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.your.class.A</class>

<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.username" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata"/>
<property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
</properties>
</persistence-unit>

<!-- Unit 2 -->
<persistence-unit name="Unit2" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.your.class.B</class>

<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.username" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata"/>
<property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
</properties>
</persistence-unit>

编辑

如果你使用的是注解配置,那么

LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setPackagesToScan("com.A");

另一个实体管理器的另一个工厂具有不同的包名。

关于java - JPA/hibernate : schema generation with multiple persistence units,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400482/

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