如何将命名查询转换为 sql 查询?

Posted

技术标签:

【中文标题】如何将命名查询转换为 sql 查询?【英文标题】:How can convert named query to sql query? 【发布时间】:2013-07-14 04:30:23 【问题描述】:

我想在 JPA 2.1 中将“命名查询”转换为“SQL 查询”并在运行之前对其进行更改。

例如,我有这个命名查询: 从 CU.CODE=?1 的客户中选择 CU 我想在 pars 之后获取查询并转换和编辑它(例如添加架构名称)并创建此查询: SELECT * from db1.cc1cust cu where cu.cc1cod=?1

我该怎么做?

问候

【问题讨论】:

你有一个你想要实现的例子吗?如果是,请在此处发布。 例如我有这个命名查询:SELECT CU FROM CUSTOMER WHERE CU.CODE=?1 我想在解析后获取查询并转换和编辑它(例如添加模式名称)并创建它查询:SELECT * from db1.cc1cust cu where cu.cc1cod=?1 请edit 您的问题并在那里发布更多信息,而不是在人们无法轻易看到的 cmets 中。谢谢。 :-) 重新阅读您的问题后,我意识到您尝试做的基本上是一个带 JPA 的多租户设置。这是不可能的,模式名称不是动态的。即将推出的 Hibernate 5 将支持此类功能,但 JPA 目前尚未处理。 【参考方案1】:

可以在实体的@Table 注释或 orm.xml 文件中指定数据库架构。

在 EclipseLink 中,您还可以使用 SessionCustomizer 中的 tableQualifier 设置架构。

没有办法在 JPQL 中随意更改架构。

要在 EclipseLink 中获取 JPQL 查询的 SQL,您可以在 DatabaseQuery 上使用 getSQLString(),请参阅, http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_get_the_SQL_for_a_Query.3F

如果您正在尝试实现多租户支持,您可能希望研究 EclipseLink 的多租户支持,

http://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/a_multitenant.htm#BABIEJGD

【讨论】:

以上是关于如何将命名查询转换为 sql 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此类 sql 查询转换为 mongodb 查询

如何将 MS SQL 查询转换为 MySQL 查询

如何将sql查询转换为linq查询

如何将此查询转换为 Hive SQL?

如何将 SQL 查询转换为 sequelize?

如何将任何给定的 SQL/HQL 选择查询动态转换为等效计数查询?