由于构建过程中出现错误,我们遇到了以下初始情况:
数据源的连接字符串
jdbc:jtds:sqlserver://db01.example.de/AppDB_Example_Prod
实体文件的目录为“AppDB_Example”
使用命名查询调用的存储过程
{ CALL usp_performSearch(:searchQuery) }
如您所见,我们在连接字符串和目录中存在不匹配。通常,他们必须/应该是平等的。
在运行时,我们执行存储过程并从数据库 AppDB_Example_Prod 中检索结果,因为这是我们连接的数据库。之后,我们使用数据库 AppDB_Example 中的entityManager加载相关实体,因为这是实体注释中提到的目录。 JPA本身就是这样做的,我们对此没有任何影响。
通过互联网搜索,我已经读过你应该创建多个持久性单元/数据源,以便使用多个数据库。
答案 0 :(得分:1)
JPA本身不支持此功能,但取决于数据库和连接的权限(通常是您用来连接的数据库用户)。
JPA并不关心架构。如果未指定,则JPA不会将架构信息发送到数据库。通常,附加到用户的默认模式(或者通过JDBC连接设置指定一个模式)。这样,数据库就知道要在哪里看。
如果指定了架构,则JPA会将此信息包含在它发送到数据库的SQL中。这意味着代替TABLE.COLUMN
,它将生成SCHEMA.TABLE.COLUMN
。这是否有效仅取决于数据库(可能是JDBC驱动程序),而不取决于JPA。
如果您的数据库用户具有必要的权限,则所有SQL数据库都应该允许您查看除默认模式之外的其他模式。