java - 将多个数据源注入单个 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>
解决方案
我知道的大多数数据库引擎都不需要这种邪恶的双重数据源技巧,您可以授予对同一用户的两个模式的读取(或写入)访问权限。
这样,用户将可以访问这两个模式并能够交叉查询。
最后使用Entity
注解来定义使用哪个模式
@Entity
@Table(name = "author", schema = "bookstore")
public class Author { ... }
推荐阅读
- java - 将字符连接到字符串数组时获取“null”
- c++ - 如何在第一个节点线性链表c ++之后添加一个节点
- ubuntu - GtkDialog 映射没有临时父级。不鼓励这样做,Katalon Studio Linux (Beta GUI) 出现错误
- javascript - 使用 React Native 平面列表和粘性标题在行中渲染项目
- swift - 如何使用 swift 4 for mac os 应用程序提取和创建 .zip 文件?
- amazon - 我想用亚马逊支付快递方式检索送货地址
- spring - 在现有 Spring 过滤器中自定义 URL 模式
- go - 如何获得 dep 确保删除未使用的 Go 文件、依赖项或包
- matlab - 如何在 Matlab2018b 中将无人机图像数据集划分为训练和测试以及 Faster R CNN 的有效部分
- react-native - ReactNative:当我使用 react-native fcm 时应用程序崩溃