如何使用JPA连接到多个数据库?
我有一个使用Java servlets / JSP的应用程序。 有多个客户端使用我的应用程序,但每个客户端都有一个单独的数据库。 所有数据库都具有相同的架构。 我想确定用户登录系统时要使用的数据库连接。
例如客户端A登录,我确定客户端A属于数据库C,获取数据库C的连接并继续我的快乐方式。
我正在使用JPA和Hibernate作为我的JPA提供程序。 是否可以使用多个持久性单元并确定在登录时使用哪个单元? 有没有更好/首选的方法来做到这一点?
编辑添加:我正在使用注释和EJB,因此使用@PersistenceContext(unitName =“blahblah”)在EJB中设置持久性上下文,这可以在登录时确定吗? 我可以在运行时更改unitName吗?
谢谢
1)使用不同的名称在persistence.xml
创建多个持久性单元。
2)创建必要数量的EntityManagerFactory
(每个持久性单元1个)并指定应该为具体工厂使用哪个持久性单元:
3)创建必要数量的TransactionManager
:
4)在DAO的类中,指定要使用哪个持久性单元(以及使用哪个EntityManagerFactory):
public class AbstractAuthDao { @PersistenceContext (unitName = "SpringSecurityManager") protected EntityManager em; ... }
5)在service-objects中指定应该使用哪个TransactionManager(仅在Spring 3.0中支持此function):
@Transactional (value = "authTransactionManager", readOnly = true) public class UserServiceImpl implements UserService { ... }
6)如果你的web.xml中有OpenEntityManagerInViewFilter
,那么在其init-param名称中指定必要的EntityManagerFactory(或者使用相应的init-blocks创建几个filter):
entityManagerFactoryBeanName authEntityManagerFactory
- hibernate。 ClassicQueryTranslatorFactory与ASTQueryTranslatorFactory
- Hibernate Annotations上的Assigned Generator类
- JPA with Hibernate 5:以编程方式创建EntityManagerFactory
- org.hibernate.MappingNotFoundException:resource:*找不到hbm.xml
- 使用hibernate命名参数两次
- 用于JPA回调的Hibernate事件侦听器
- Hibernate返回整数值
- Spring应用程序似乎不是持久化数据
- 在hibernate查询语言中舍入到小数点后2位