在同一查询中混合 HQL 和 SQL

2024-02-09

我正在尝试在同一个查询中混合 HQL 和 SQl。喜欢使用

“来自 Object 对象,TABLE_B tbl,其中 obj.simeProp = tbl.COLUMN”

因为我的客户需要修改查询,学习 HQL 或映射未映射的表是不可能的:(

如果不是休眠,有人知道另一个可以接受这个的 ORM 工具吗?另一个 JPA 实现,还是 JDO?

我已经尝试过了,当然这是行不通的。这对我来说也很有意义:结果没有映射到对象,因此没有某种编码就无法获取对象。我主要是在寻找为什么这不会很快起作用的原因。


这确实行不通,而且我认为它永远不会行得通,但这并不是因为“没有办法获取对象”。

休眠does允许您使用普通 SQL 查询 http://docs.jboss.org/hibernate/stable/core/reference/en/html/querysql.html#d0e13696并提供了许多不同的选项用于将结果映射到实体(或非实体 java 对象)。您可以将查询写为:

SELECT table_A.*
  FROM table_A JOIN table_B on table_A.some_prop_column = tableB.other_column
 WHERE ...

并通过以下方式从 Hibernate 执行它:

List objectAs = session.createSQLQuery(yourQuerySQL).addEntity(ObjectA.class).list();

问题在于mixingSQL 和 HQL 的一个缺点是它们之间很容易产生冲突——从 HQL 生成的 SQL 可能使用一个表别名,而原始 SQL 可能使用另一个表别名;生成的 SQL 可能包含与原始 SQL 冲突的表/连接等...

最后,一切都让你绝对满意nothing- 它甚至不会帮助你的用例。如果您希望某人修改“混合”HQL / SQL 查询,他们仍然需要知道bothSQL 和 HQL - 至少在区分两者所需的级别上。

话虽如此,如果您的最终用户需要能够自定义该查询,也许您应该考虑使用标准API http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html为了根据用户的输入生成您需要的查询。让最终用户修改应用程序中的实际查询是一个巨大的安全漏洞,除非您采取extreme防范措施。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一查询中混合 HQL 和 SQL 的相关文章

随机推荐

  • 如何读取和处理(解析)命令行参数?

    在Python中 我们如何找到为脚本提供的命令行参数并处理它们 Related background reading What does sys argv 1 mean What is sys argv and where does it
  • 在位数组中有效查找“1”的位置

    我正在连接一个程序来测试一组电线的开路或短路情况 该程序在 AVR 上运行 将测试向量 步行 1 驱动到电线上并接收返回结果 它将所得向量与已存储在 SD 卡或外部 EEPROM 上的预期数据进行比较 这里有一个例子 假设我们有一组 8 根
  • 员工单独工作时间安排

    我有工作人员的时间清单 我需要查明是否有员工单独工作以及他们一天单独工作了多少分钟 staff start end 1 11 05 20 00 2 11 00 17 00 3 19 00 03 00 4 13 00 20 00 5 19 0
  • Selenium JavaScript - 将元素滚动到视图中而不与标题重叠

    webdriver executeScript arguments 0 scrollIntoView element 这会将元素滚动到视图中 但它位于页面标题的后面 如何将元素滚动到视图中 以便该元素位于标题正下方而不是标题后面 方法scr
  • 视频作为网站上的背景根据命令播放

    我一直在尝试将视频设置为背景 我有 flv 文件和 youtube 链接 使用 html5 视频标签或 jquery 将其放在我的网站上并不困难 但我找不到如何将它放在我的网站上但不能自动启动 我有一个半透明的矩形 文本将显示在其中 所以我
  • 为什么Android布局中的Fragment元素用小写的“f”书写?

    所有其他元素都以大写字母开头 例如RelativeLayout TextView 等 Fragment 元素始终用作
  • 具有 32/16 位除法的处理器上的 64/32 位除法

    我的处理器 http www microchip com wwwproducts Devices aspx dDocName en532298 一个没有 FPU 和整数数学的小型 16 位微控制器 只有 16 16 除法和 32 16 除法
  • 将输入传递给 Angular 2 中的嵌套组件

    如何将属性从包装组件透明地转换为嵌套组件 考虑到有 const FIRST PARTY OWN INPUTS const FIRST PARTY PASSTHROUGH INPUTS all attrs are passed Compone
  • Angular ui 引导程序未加载

    我从示例页面获取所有内容 基本上没有什么不同 控制器和 html 正文是从手风琴示例中纯粹复制粘贴的https angular ui github io bootstrap https angular ui github io bootst
  • 如何更改加载浏览器外 Silverlight 3 应用程序的背景颜色?

    在浏览器外运行 Silverlight 3 应用程序时 启动需要一点时间 但时间足够长 足以引起人们的注意 在此启动期间 托管应用程序的窗口的背景显示丑陋的白色背景颜色 在浏览器中运行时 我们有一个启动屏幕 但它当然是通过 JavaScri
  • 查找 bash 中第一列中每个不同值的第 n 列中的最大值

    我有一个 3 列文件 我想找到第三列的最大值 其中行与第一列相同 并且输出中还有第二列 Input 1 234 0 005 1 235 0 060 1 236 0 001 2 234 0 010 2 235 0 003 2 236 0 00
  • 在同一场景中加载新的 fxml

    我有 2 个 fxml 文件 布局 标题 菜单栏和内容 Anchorpane 它应该放置在其他 fxml 文件的内容中 我想知道如何从 Master 场景加载内容空间内的第二个文件 在 javaFX 中工作是一件好事还是加载新场景更好 我正
  • 如何显示视频路径中的视频缩略图?

    我想在 ImageView 中显示存储上视频路径的视频缩略图 是否有一个函数可以获取视频路径并返回缩略图的位图 我通过以下代码获取视频路径 public ArrayList
  • F# 可变列表为空

    当我尝试运行下面的代码时 属性为空 这是为什么 我为属性分配了一个空列表 但第一次通过循环时 它为空 这会导致它删除我附加到它的第一个值 我也不明白这一点 似乎与 null 连接的值应该是该值的列表
  • Grep正则表达式查找可变长度字符串中的数字

    我需要某种方法来查找包含字符和数字的任意组合的单词 但是仅恰好 4 位数字 以及至少一个字符 EXAMPLE a1a1a1a1 Match 1234 NO match no characters a1a1a1a1a1 NO match ab
  • 将自定义包添加到 Azure 机器学习工作室

    我需要使用 azure 机器学习工作室上的函数 tsCV 来评估预测模型 但出现错误 could not find function tsCV 我正在尝试更新预测包 但未加载任何包 我按照这个教程http blog revolutionan
  • 简单的伪随机算法

    我需要一个伪随机生成器 它将一个数字作为输入并返回另一个数字 该数字是可再现的并且似乎是随机的 每个输入数字应与一个输出数字完全匹配 反之亦然 相同的输入数字总是导致相同的输出数字 靠近的连续输入数字 例如 1 和 2 应该产生完全不同的输
  • 为 i18n 设计属性?

    如何翻译 Devise 模型的属性 例如 session email or session remember me 两个层次结构 de devise sessions email E Mail and de activerecord att
  • Java中的“自动递增”字母表?

    Java 中的 自动增量 字母表 这可能吗 从头到尾没有第三方库 是的 你可以这样做 for char alphabet A alphabet lt Z alphabet System out println alphabet 也可以通过类
  • 在同一查询中混合 HQL 和 SQL

    我正在尝试在同一个查询中混合 HQL 和 SQl 喜欢使用 来自 Object 对象 TABLE B tbl 其中 obj simeProp tbl COLUMN 因为我的客户需要修改查询 学习 HQL 或映射未映射的表是不可能的 如果不是