当前位置: 首页 > 面试题库 >

如何使用JPA连接到多个数据库?

韶镜
2023-03-14
问题内容

我有一个使用Java Servlet /
JSP的应用程序。我的应用有多个客户端,但是每个客户端都有一个单独的数据库。所有数据库都具有相同的架构。我想确定用户登录系统时要使用哪个数据库连接。

例如,客户端A登录后,我确定客户端A属于数据库C,抓住了数据库C的连接,然后继续愉快地进行操作。

我正在将JPA与Hibernate一起用作我的JPA提供程序。是否可以使用多个持久性单元并在登录时确定使用哪个单元来执行此操作?有没有更好/更好的方法来做到这一点?

编辑添加:我正在使用批注和EJB,因此使用@PersistenceContext(unitName =“
blahblah”)在EJB中设置了持久性上下文,这可以在登录时确定吗?我可以在运行时更改unitName吗?

谢谢


问题答案:

1)在您的帐户中persistence.xml使用不同的名称创建多个持久性单元。

2)创建必要的EntityManagerFactorys(每个持久性单位为1),并指定具体工厂应使用哪个持久性单位:

<bean id="authEntityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
   <property name="persistenceUnitName" value="SpringSecurityManager"/>
</bean>

3)创建必要的TransactionManagers 数:

<bean id="authTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
   <property name="entityManagerFactory" ref="authEntityManagerFactory" />
</bean>

4)在您的DAO的类中,指定您要使用哪个持久性单元(以及哪个EntityManagerFactory):

public class AbstractAuthDao<T> {

   @PersistenceContext (unitName = "SpringSecurityManager")
   protected EntityManager em;

    ...
}

5)在服务对象中指定应使用哪个TransactionManager(仅在Spring 3.0中支持此功能):

@Transactional (value = "authTransactionManager", readOnly = true)
public class UserServiceImpl implements UserService {

   ...
}

6)如果OpenEntityManagerInViewFilter在web.xml中,请在其init-
param名称中指定必要的EntityManagerFactory(或使用相应的init-blocks创建多个过滤器):

<init-param>
    <param-name>entityManagerFactoryBeanName</param-name>
    <param-value>authEntityManagerFactory</param-value>
</init-param>


 类似资料:
  • 问题内容: 我是hibernate和尝试事物的新手。似乎所有令人感兴趣的一件事是如何连接到不同的数据库?我在这里有两个问题: 如果在同一个Web应用程序中,我需要连接到MySQL和Oracle,该怎么办? 我正在使用MySQL,并且有两个数据库test1和test2,如何连接和检索数据? 我在博客中读到我们可以创建不同的配置文件并执行此操作。我尝试过,但是没有成功。这是我尝试过的: 其中path是

  • 我正在尝试使用JPa连接到我的mysql数据库。 我生成了persistance.xml: 并且通过这样做,intelij生成了POJO类: 我已经创建了实体管理器,并希望从中获得结果: 和路线: 然而,当我导航到localhost:8080/hi 它抛出 在浏览器和 控制台中。我不知道什么会导致这个问题,非常感谢所有的帮助

  • 问题内容: 如何使用java连接到mysql数据库? 问题答案: 逐步说明如何安装MySQL和JDBC以及如何使用它: 1.下载并安装MySQL服务器。只需按照通常的方式进行即可。每次更改时都请记住端口号。默认情况下3306。 2.下载 JDBC驱动程序并放入classpath,解压缩ZIP文件并将包含的JAR文件放入classpath。特定于供应商的JDBC驱动程序是 JDBC API的具体实现

  • 我的WebApp使用多个数据库,我尝试使用GlassFish连接池来管理连接,但我发现配置示例只使用一个数据库。 那么,我该怎么办?创建与我正在使用的数据库数量相同的连接池,或者是否有方法将一个池配置为多个数据库?

  • 也就是说,我想创建应用程序,然后让这些应用程序访问一个项目的特定Firebase数据库。 查看Firebase Android文档,我找不到一种方法来使用下面的方法将数据发送到另一个项目中的另一个Firebase数据库,但其中的引用是另一个项目的。

  • 从bugu-mongo 2.11版本开始,支持连接到多个数据库。 在前面的示例代码中,我们都只是连接到一个数据库: //默认的数据库连接 BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.setHost("192.168.0.100"); conn.setPort(27017); conn.setU