1

如何为 2 个数据库命名本机查询并让 EclipseLink 在数据库上运行正确的查询?

我举个例子:我有一个可以在 Oracle Db 和 PostgreSQL 上运行的解决方案。需要在 db 上运行本机查询。因此,Oracle 的本机查询与 PostgresSQL 的本机查询不同。如何将它们作为命名查询放在 orm.xml 中,然后让 EclipseLink 根据运行时环境在每个数据库上运行正确的查询。

每个数据库都应该有替代的 orm 文件吗?不允许存储过程/数据库函数和类似的东西。所以我必须命名本地查询。

4

1 回答 1

2

JPA 2.1 允许将命名查询动态添加到工厂,允许您根据您的平台指定要在运行时添加的查询。

除非您要将目标数据库传递给您的代码,否则从提供程序获取它将需要本机 API 或使用连接来获取其元数据。从 EclipseLink 获取它需要获取会话,然后在其上调用 getPlatform() 并使用它的 isOracle 和 isPostgreSQL 来确定要添加哪个查询,或者是其他平台的通用查询。就像是

entityManagerFactory.unwrap(Session.class).getPlatform().isOracle();
于 2016-02-26T18:15:21.903 回答