如何使用 OR 和汇总函数构建高级 Hibernate 查询

2023-12-21

我有一个在 SQL 中运行的相当复杂的查询,但为了可移植性,我想用 HQL 来表达它。我将获取用户配置的首选项值(如果存在),如果不存在,我必须使用默认值。必须从当前日期中减去该值,并将其与我感兴趣的表中的列进行匹配:

select d.id, d.guid, d.deletetimestamp, u.id 
from descriptor d, ownerkey ow, user u
where 
    d.parentid in 
        (select td.id 
         from descriptor td, store s 
         where s.type = 'Trash' 
         and s.descriptorid = td.id
        )
    and d.ownerkeyid = ow.id
    and ow.ownerid = u.id
    and 
       (
         (d.deletetimestamp < CURRENT_TIMESTAMP() - INTERVAL 
            (select pv.value 
             from preferencevalue pv, userpreference up
             where u.id = up.userid
             and up.preferenceid = 26 
             and up.value = pv.id) 
          DAY)
       or 
        (d.deletetimestamp < CURRENT_TIMESTAMP() - INTERVAL
            (select cast(pv.value as SIGNED) 
             from preferencevalue pv, defaultpreference dp
             where dp.preferenceid = 26
             and not exists(select up.userid from userpreference up where u.id = up.userid and up.preferenceid = 26)
             and dp.value = pv.id)
           DAY)
       )

我正在尝试使用 Criteria API 来构建它,它似乎包含我需要的大多数逻辑运算符(等于、大于、或 isEmpty/isNull),但不确定如何表达所有这些部分。

此时使用视图不是一个选项,因为我们使用 MySQL 作为生产数据库,而集成测试则使用 H2 内存数据库运行。我无法在 H2 中找到 sata 减去函数,而 MySQL 确实支持此功能。

选择字段并不重要,因为它们仅用于测试目的。


  1. 您可以使用Restrictions.disjunction()对于或-和Restrictions.conjuction()for 和 子句。
  2. 要引用实体的某个属性(如 pv.value),您可以使用Projections.property("value")
  3. 对于铸造我不确定,也许使用@Formula您的实体上的注释?但这是一个 hibernate,而不是 JPA 注释。
  4. 据我所知,没有等效的INTERVAL在休眠中,但在这种情况下(也许也适用于上面的演员)你可以使用Restrictions.sqlRestriction("some sql...")

将所有这些放在一起以将您的查询转换为休眠条件将是一个挑战。

greetz,
Stijn

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

如何使用 OR 和汇总函数构建高级 Hibernate 查询 的相关文章

随机推荐

  • 编译为本机代码并包含电池的编程语言

    有哪些编程语言可以编译为本机代码并提供了全面的库 包含网络 文件 IO 正则表达式 数据库 图形 多媒体 Win32 API 绑定 文件压缩等功能的库 我假设每个人都想到过 C 和 C Haskell http haskell org是这里
  • Pandas 合并列,但不合并“键”列

    这似乎是一个愚蠢的问题 但这已经困扰我一段时间了 df1 imp type value 1 abc 2 def 3 ghi df2 id value2 1 123 2 345 3 567 合并 2 个 df df1 merge df2 le
  • 编写黑莓应用程序[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何编写黑莓应用程序 我使用的是带有 VMWare 的 OS X Leopard 我开发 BlackBerry 应用程序已经很多年了
  • java.lang.IllegalStateException:ViewPager尚未绑定(使用JakeWharton ViewPager指示器)

    我在一个屏幕上有两个视图寻呼机 一个 ViewPager 使用 JakeWharton 的圆形指示器 第二个使用 TabPage Indicator 我需要使用异步调用从后端下载数据 下载数据后 我应该在视图页面中显示数据 这是我的活动的代
  • WinForms 本地化。如何更改菜单的语言

    编辑 虽然有用 但 重复 问题并没有给出这个问题的答案 首先 这里的主题是Menus 因此请不要将此问题标记为与其他问题重复 我一直在尝试正确理解如何本地化应用程序 现在我有一个带有标签 菜单和列表框的表单 我已经本地化了表格 现在我有三个
  • 有没有自动方法来标准化谷歌工作表数据

    我有一个超过 3000 行的数据集 并且有一些采用这种格式的列 A B C 表 1 我想用特定的 ID 表 2 规范化每一行 X1 Y1 ID RF Z1 ARRAYFORMULA QUERY QUERY TRIM SPLIT TRANSP
  • 如何通过代码获取python模块的版本号? [复制]

    这个问题在这里已经有答案了 我正在尝试获取我使用的特定几个模块的版本号 我可以将一些东西存储在变量中 Use pkg 资源 http setuptools readthedocs io en latest pkg resources htm
  • 何时使用基于 ES6 类的 React 组件与函数式 ES6 React 组件?

    在花了一些时间学习 React 之后 我了解了创建组件的两种主要范例之间的区别 我的问题是我什么时候应该使用哪一个以及为什么 一种相对于另一种的优点 权衡是什么 ES6 类 import React Component from react
  • 在Kafka集群中添加新的ZooKeeper节点?

    我正在运行一个包含五个节点的 Apache Kafka 集群 并且正在使用一个包含三个节点的 Apache ZooKeeper 集群 在zookeeper properties文件中 server 1 zNode01 2888 3888 s
  • 在实体框架中保存断开连接的对象4

    在 EF1 中 我不能只更新在 ObjectContext 范围之外构造的对象 使用正确的 id EF4有新方法吗 我可以将其添加到上下文中吗 context AddOrder order 其中 context 是我的 ObjectCont
  • 单击时显示微调器

    我构建了一个微调器并使用 CSS 对其进行了动画处理 现在我尝试隐藏微调器并在单击按钮时显示它 到目前为止 我已经编写了这段代码 当我单击提交时它没有显示
  • 应如何使用基于类的视图动态设置模板名称?

    我已经搜索了基于类的视图 Django 文档 Django 1 4 的参考和主题 但我没有找到任何提及这一点的内容 如何使用基于类的视图动态设置模板名称 我正在寻找以下设置的基于类的等效项 urls py from django conf
  • 滚动选项卡时工具栏淡入淡出(代号一)

    Codename One 手册中的 如何在滚动时淡出工具栏 部分描述了如何在滚动时淡出工具栏标题动画 https www codenameone com manual components html title animations sec
  • Django REST 框架:动态序列化器关系字段 - POST pk 但 GET 超链接

    在我的模型中 我有 州 和 国家 一个国家可以有多个州 PK 1 的 HTTP GET 状态 id 1 url http test com states 1 name Ohio country http test com countries
  • 不含状态栏、操作栏和选项卡的屏幕高度

    我有一个 ListView 我希望每一行填充可用屏幕的三分之一 我有可见的状态栏 然后有一个带有滑动选项卡的操作栏 我正在做这样的当前计算 height context getResources getDisplayMetrics heig
  • Bash 真实的数字顺序

    如何按真实的数字顺序对目录中的文件进行排序 file1 txt file2 txt file11 txt 我认为它的名字是 自然秩序 Use the v option ls v file file1 file2 file11 file12
  • 在 R 中从列表转换为 data.frame 时,utf-8 字符会丢失

    我在 Windows 7 64 位上使用 R 3 2 0 和 RStudio 0 98 1103 我的电脑的Windows 区域和语言设置 是英语 美国 由于某种原因 以下代码将文本 Kory any nad p ehradou 中的捷克语
  • 使用 Selenium Webdriver 测试 sessionStorage

    我正在编写基于 Java 的 selenium webdriver 测试 我正在测试的应用程序在 storageSession 中设置了某些值 例如sessionStorage setItem demo test 如何检查并断言存储变量的值
  • 引用 x64 dll 文件在 C# 中有效,但在 F# 中无效

    我使用最新的 VS 2010 创建了两个全新的解决方案 C 控制台应用程序 F 控制台应用程序 我引用了两个x64 dll文件 Kitware VTK dll and Kitware mummy Runtime dll 可以在这里下载 ht
  • 如何使用 OR 和汇总函数构建高级 Hibernate 查询

    我有一个在 SQL 中运行的相当复杂的查询 但为了可移植性 我想用 HQL 来表达它 我将获取用户配置的首选项值 如果存在 如果不存在 我必须使用默认值 必须从当前日期中减去该值 并将其与我感兴趣的表中的列进行匹配 select d id