0

我有一个使用一个数据库的应用程序,现在我已经配置了这个 data-access-config.xml。

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
    <!-- Instructs Spring to perfrom declarative transaction management on annotated classes -->
    <tx:annotation-driven />
    <!-- Drives transactions using local JPA APIs -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <!-- Creates a EntityManagerFactory for use with the Hibernate JPA provider and a simple in-memory data source populated with test data -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://localhost:5432/database1" />
        <property name="username" value="admin1" />
        <property name="password" value="some_pass" />
    </bean>
</beans>

它连接良好,但现在我需要配置第二个数据库(在同一台服务器中),试图复制 EntityManagerfactory 但抛出错误,不能同时拥有两个实体管理器,所以我在这里感到困惑。我正在使用 Hibernate+JPA+Spring

谢谢!!!

4

2 回答 2

1

我相信这样的事情应该有效:

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    ...
</bean>

<bean id="emf1" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource1" />
    ...
</bean>

在 DAO 中,使用

@PersistenceContext(unitName = "emf1")
private EntityManager em;

以上将告诉 DAO 使用该emf1实例。

也许你忘了给你的第二个实体经理命名与你的第一个不同的名字?

于 2012-11-14T21:03:03.877 回答
0

您可能需要使用“持久性单元管理器”来帮助管理您的持久性单元。请参阅有关多个持久性单元的 Spring 文档。您将拥有 2 个数据源、1 个实体管理器工厂和 1 个持久性单元管理器。

实体管理器因素将引用持久性单元管理器(而不是 2 个数据源),然后持久性单元管理器将引用 2 个数据源。

于 2012-11-15T20:31:19.077 回答