我在Spring MVC中使用“使用多个数据库”时遇到了麻烦 - hibernate JPA
我有两个名为 user_db 和 portal_db 的数据库。我需要以不同的jpa单位与他们合作。
这是我的 persistance.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="user_unit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Package.Entity1</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost/user_db" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.connection.username" value="postgres" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" />
<!--<property name="hibernate.hbm2ddl.auto" value="create-drop" />-->
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
<persistence-unit name="portal_unit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Package.Entity2</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost/portal_db" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.connection.username" value="postgres" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect" />
<!--<property name="hibernate.hbm2ddl.auto" value="create-drop"/>-->
<property name="hibernate.hbm2ddl.auto" value="validate"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
问题是当我使用create-drop并运行我的项目时,它会在两个数据库中创建我的两个entites。像user_unit中只应由Package.Entity1
创建的表一样,也是在portal_unit中创建的。
当我选择,插入,更新我的entites时,我在每个DAO中设置了持久性单位。
例如,在Entity Dao的实现中我有:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit);
其中 persistenceUnit 可以是user_unit
或portal_unit
,具体取决于实施方式。
我应该做些什么更改才能在两个数据库中创建相同的表?
答案 0 :(得分:1)
在您的两个持久性单元中添加<exclude-unlisted-classes>true</exclude-unlisted-classes>
或使用JPA 2.x
答案 1 :(得分:1)
在两个持久性单元中添加<exclude-unlisted-classes>true</exclude-unlisted-classes>
。
请按照以下帖子获取详细说明:
Multiple persistance unit in persistence.xml creating tables in one another