如何为2个数据库命名原生查询,并让EclipseLink在数据库上运行正确的查询?
我举了一个例子:我有一个可以与Oracle Db和PostgreSQL一起运行的解决方案。需要在db上运行本机查询。因此,Oracle的原生查询不同于PostgresSQL的原生查询。如何将它们作为命名查询放在orm.xml中,然后让EclipseLink根据运行时环境在每个数据库上运行正确的查询。
每个数据库都应该有替代的orm文件吗?不允许使用存储过程/db函数和类似的东西。所以我必须命名原生的quire。
发布于 2016-02-27 02:15:22
JPA2.1允许将命名查询动态添加到factory,允许您根据您的平台在运行时指定要添加的查询。
除非您打算将目标数据库传递给您的代码,否则从提供程序获取它将需要本机API或使用连接来获取其元数据。从EclipseLink获取它需要获取会话,然后在会话上调用getPlatform(),并使用它的isOracle和isPostgreSQL来确定要添加哪个查询,或者为其他平台添加一个通用查询。就像这样
entityManagerFactory.unwrap(Session.class).getPlatform().isOracle();https://stackoverflow.com/questions/35643269
复制相似问题