首页 > 解决方案 > 将多个数据源注入单个 EntityManagerFactory?

问题描述

我正在尝试使用内部连接查询+JPA nativesql 从同一数据库服务器中两个不同模式(逻辑数据库)的两个不同表中获取数据。如何将多个数据源注入同一个实体管理器?

我的配置文件看起来像这样

<bean id="userDataSource" class="org.jdbcdslog.DataSourceProxy">
    <description>Data source for User database</description>
    <property name="targetDSDirect">
        <bean class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="jdbc/cUser" />
            <property name="resourceRef" value="true" />
        </bean>
    </property>
</bean>

<bean id="masterDataSource" class="org.jdbcdslog.DataSourceProxy">
    <description>Data source for User database</description>
    <property name="targetDSDirect">
        <bean class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="jdbc/Master" />
            <property name="resourceRef" value="true" />
        </bean>
    </property>
</bean>

<bean id="entitymanager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceXmlLocation"
              value="classpath:com/jpa_persistence.xml" />
    <property name= "persistenceUnitName" value= "CP"/>
    <property name="dataSource" ref="userDataSource" />   
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
    <property name="jpaPropertyMap">
        <map>
            <entry key="eclipselink.weaving" value="false"/>
        </map>
    </property>  
</bean>

标签: javajpa

解决方案


我知道的大多数数据库引擎都不需要这种邪恶的双重数据源技巧,您可以授予对同一用户的两个模式的读取(或写入)访问权限。

这样,用户将可以访问这两个模式并能够交叉查询。

最后使用Entity注解来定义使用哪个模式

@Entity @Table(name = "author", schema = "bookstore") public class Author { ... }


推荐阅读