如何使用JPA和EclipseLink为2(或更多)数据库命名本机查询

时间:2016-02-26 04:06:05

标签: java jpa eclipselink nativequery

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

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

每个数据库是否应该有替代的orm文件? 不允许存储过程/ db函数和类似的东西。所以我必须命名本机quires。

1 个答案:

答案 0 :(得分:2)

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

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

这样的东西
entityManagerFactory.unwrap(Session.class).getPlatform().isOracle();