我的应用程序数据访问层是使用 Spring 和 EclipseLink 构建的,我目前正在尝试实现以下功能 - 能够为用户动态切换当前/活动的持久性单元。我尝试了各种选择,最后做了以下事情。
在persistence.xml 中,声明多个PU。创建一个具有与定义的 PU 一样多的 EntityManagerFactory 属性的类。这将充当工厂并根据我的逻辑返回适当的 EntityManager
public class MyEntityManagerFactory {
@PersistenceUnit(unitName="PU_1")
private EntityManagerFactory emf1;
@PersistenceUnit(unitName="PU_2")
private EntityManagerFactory emf2;
public EntityManager getEntityManager(int releaseId) {
// Logic goes here to return the appropriate entityManeger
}
}
我的 spring-beans xml 看起来像这样..
<!-- First persistence unit -->
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="emFactory1">
<property name="persistenceUnitName" value="PU_1" />
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager1">
<property name="entityManagerFactory" ref="emFactory1"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager1"/>
对于第二个 PU(名称如 emFactory2、transactionManager2 等)重复上述部分。
我是 JPA 新手,我知道这不是最好的解决方案。我感谢以更好/优雅的方式实施此要求的任何帮助!
谢谢!