【问题标题】:How to have named native queries for 2 (or more) database using JPA and EclipseLink如何使用 JPA 和 EclipseLink 为 2 个(或更多)数据库命名本机查询
【发布时间】:2016-06-09 04:04:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jpa eclipselink nativequery


    【解决方案1】:

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

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

    entityManagerFactory.unwrap(Session.class).getPlatform().isOracle();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 2013-03-11
      相关资源
      最近更新 更多