使用一个持久性单元连接到多个数据库

时间:2014-12-19 08:56:07

标签: sql-server hibernate jpa

由于构建过程中出现错误,我们遇到了以下初始情况:

  • 数据源的连接字符串

    jdbc:jtds:sqlserver://db01.example.de/AppDB_Example_Prod
    
  • 实体文件的目录为“AppDB_Example”

  • 使用命名查询调用的存储过程

    { CALL usp_performSearch(:searchQuery) }
    

如您所见,我们在连接字符串和目录中存在不匹配。通常,他们必须/应该是平等的。

在运行时,我们执行存储过程并从数据库 AppDB_Example_Prod 中检索结果,因为这是我们连接的数据库。之后,我们使用数据库 AppDB_Example 中的entityManager加载相关实体,因为这是实体注释中提到的目录。 JPA本身就是这样做的,我们对此没有任何影响。

通过互联网搜索,我已经读过你应该创建多个持久性单元/数据源,以便使用多个数据库。

  1. 它是否有用,因为它应该做或者我们遇到了错误?
  2. 可以通过一个连接字符串使用多个数据库而没有任何问题吗?
  3. 这是否仅适用于SQLServer(MSSQL),如果我们将来可能更改为其他数据库,它会失败吗?

1 个答案:

答案 0 :(得分:1)

JPA本身不支持此功能,但取决于数据库和连接的权限(通常是您用来连接的数据库用户)。

JPA并不关心架构。如果未指定,则JPA不会将架构信息发送到数据库。通常,附加到用户的默认模式(或者通过JDBC连接设置指定一个模式)。这样,数据库就知道要在哪里看。

如果指定了架构,则JPA会将此信息包含在它发送到数据库的SQL中。这意味着代替TABLE.COLUMN,它将生成SCHEMA.TABLE.COLUMN。这是否有效仅取决于数据库(可能是JDBC驱动程序),而不取决于JPA。

如果您的数据库用户具有必要的权限,则所有SQL数据库都应该允许您查看除默认模式之外的其他模式。