Hibernate 查询集合中的多个项目

2024-02-15

我有一个看起来像这样的数据模型:

public class Item {
    private List<ItemAttribute> attributes;
    // other stuff
}

public class ItemAttribute {
    private String name;
    private String value;
}

(这显然简化了很多无关的东西)

我想要做的是创建一个查询来询问具有一个或多个特定属性的所有项目,最好用任意 AND 和 OR 连接。现在我保持简单,只是尝试实现 AND 案例。在伪 SQL(或者伪 HQL,如果你愿意的话)中,它会是这样的:

select all items
where attributes contains(ItemAttribute(name="foo1", value="bar1"))
AND attributes contains(ItemAttribute(name="foo2", value="bar2"))

Hibernate 文档中的示例似乎没有解决这一特定用例,但它似乎是一个相当常见的用例。析取情况也很有用,特别是这样我可以指定可能值的列表,即

where attributes contains(ItemAttribute(name="foo", value="bar1"))
OR attributes contains(ItemAttribute(name="foo", value="bar2"))
-- etc.

下面是一个适用于单个属性的示例:

return getSession().createCriteria(Item.class)
        .createAlias("itemAttributes", "ia")
        .add(Restrictions.conjunction()
            .add(Restrictions.eq("ia.name", "foo"))
            .add(Restrictions.eq("ia.attributeValue", "bar")))
        .list();

学习如何做到这一点对于扩展我对 Hibernate 潜力的理解大有帮助。 :)


你能使用别名来做到这一点吗?

Criteria itemCriteria = session.createCriteria(Item.class);
itemCriteria.createAlias("itemAttributes", "ia1")
            .createAlias("itemAttributes", "ia2")
            .add(Restrictions.eq("ia1.name", "foo1"))
            .add(Restrictions.eq("ia1.attributeValue", "bar1")))
            .add(Restrictions.eq("ia2.name", "foo2"))
            .add(Restrictions.eq("ia2.attributeValue", "bar2")))

不确定 hibernate 如何像这样明确地处理同一属性的连接两次,也许值得尝试?

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

Hibernate 查询集合中的多个项目 的相关文章

随机推荐

  • 如何解码 HTML 实体?

    这是一个 Perl 快速问题 如何转换 HTML 特殊字符 例如 uuml or 039 转换为普通 ASCII 文本 我从这样的事情开始 s d chr 1 eg 并且可以为所有 HTML 字符编写它 但是像这样的函数可能已经存在 请注意
  • 在按下和释放鼠标时绘制矩形,opengl

    我试图根据用户输入绘制一个矩形 该矩形从左键单击收集 x1 y1 坐标 然后从左键单击的释放指定 x2 y2 我成功保存了基于此鼠标操作的坐标 基于确认保存坐标的 cout 这是我尝试过的 请记住 没有任何崩溃 因此存在逻辑错误 void
  • 如何使用 Factorplot 用分类值注释条形或绘制 4 个变量?

    我有一个要绘制的数据框 我想到了两个选择 检查图像 对于选项 1 我需要注释一个分类值 Elec 对于选项 2 我仍然需要使用 factorplot 但我不知道如何修复收到的错误 CODE FOR THE DATAFRAME raw dat
  • Bootstrap 4 有内置水平分隔线吗?

    Bootstrap 4 有内置水平分隔线吗 我可以做这个 但我想使用内置的 bootstrap css 我在文档中找不到它 也许我错过了它 HTML 已经有一个内置的水平分隔符 称为 hr 水平规则 的缩写 Bootstrap 风格像这样
  • 哪些方法可以访问源代码?

    有多种方法可以从需要 加载该库的 Ruby 代码中访问该库的源代码 其中 有的直接读取库文件并解析 其他人通过一些内置方法访问源代码 这些方法提供有关源代码的信息 例如抽象语法树 在我无法直接读取文件内容的情况下 如前面的方式 访问源的唯一
  • 如何使用公共类上的静态变量在活动之间传递数据?

    我试图在公共类上使用静态变量来在活动之间传递它们 我在这样做时遇到了一个罕见的问题 我正在为活动的静态变量赋予值 此活动调用 GLSurfaceView 并监听屏幕方向的变化 如果我为 GLSurfaceView 上的静态变量赋予值 那么一
  • iOS 如何保存录制的音频?

    我正在开发一个应用程序 其中音频被录制并转录为文本 我正在使用 Nuance Developers 提供的 Speechkit 我要添加的功能是 将录制的音频文件保存到永久内存 在表格视图中显示音频文件 稍后加载保存的音频文件 播放音频文件
  • 从 MPEG TS 中提取 PCR 时间值

    我正在尝试从 MPEG TS 数据包中提取 PCR 时间值 根据wiki http en wikipedia org wiki MPEG transport stream PCR 包含 33 6 9 位 并且还指出前 33 位基于 90 k
  • 将文件插入 Google Drive 时出现 IOException

    我在将图像发布到 Google 云端硬盘时遇到以下问题 java io IOException insufficient data written at sun net www protocol http HttpURLConnection
  • locationManager didUpdateLocations 在设备上触发两次,在模拟器上仅触发一次

    相同的代码 我假设设备实际上由于某种原因更新了位置两次 即使我只调用 startUpdatingLocation 一次并且在 didUpdateLocations 内部运行一些 stopUpdatingLocations func loca
  • 如何在 Android Jetpack Compose 中使用字符串资源?

    让我有以下内容strings xml资源文件
  • python中uuid4和秘密token_bytes有什么区别?

    检查了两者的cpython源代码secrets https github com python cpython blob master Lib secrets py and uuid4 https github com python cpy
  • 使用 function-java 向 Java 生产项目添加闭包有多安全?

    我很想在 Java 中使用闭包 我读到过 它们可能会也可能不会进入 Java 7 但是有一个名为函数式java http code google com p functionaljava 已经实现了包括闭包在内的功能特性 在企业生产应用程序
  • 在 group_by() %>% mutate() 函数调用中使用带引号的变量

    可重现的例子 cats lt data frame name c letters 1 10 weight c rnorm 5 10 1 rnorm 5 20 3 type c rep not fat 5 rep fat 5 get mean
  • 在 Elixir 中测试异步代码

    我想测试一个正在使用的函数Task async 为了让我的测试通过 我需要让它在断言之前休眠 100 毫秒 否则测试进程会在执行异步任务之前被终止 有没有更好的办法 编辑 添加代码示例 我想测试的代码 大致 def search param
  • 设置新行Datagrid的内容

    我有一个 DataGrid 显示一些具有相当多列的数据库 我希望当用户编辑新行时 会自动设置一些值 对于窗口形式的 DataGrid 这会很容易 因为有 RowsAdded 事件处理程序 但我如何用 wpf DataGrid 处理这个问题
  • SQL Server 触发器从视图添加/更新表

    我有一个表 我想在将新行添加到视图时添加 更新该表 但我正在努力完成这项工作 我的目标表是课程学习者进度 我的观点是Quiz Results For Course Learner Progress 我已经从记录测验分数的表创建了视图 并由
  • 如何处理 Retrofit 2 中不同类型的响应

    在 Web Api 中返回 JSON 字段可以属于不同的类 someField some string someField en some string ka 我见过一些解决方案 但这是在以前版本的 Retrofit 上 我的 pojo 类
  • Flutter - 错误:没有为“Object”类型定义 getter“docs”

    我正在开发 Flutter 2 2 1 通道稳定 我最近将 SDK 的环境从 2 7 0 更改为 2 12 0 sdk gt 2 12 0 lt 3 0 0 为了添加插件 我遇到了很多错误 尤其是关于零安全性 其中之一是关于从 firest
  • Hibernate 查询集合中的多个项目

    我有一个看起来像这样的数据模型 public class Item private List