Criteria API:按类类型过滤

2023-11-27

我对关系数据库相对陌生,并且在创建查询方面遇到一些问题。首先我想简单地解释一下情况。我有几个实体类。全部都延伸了AbstractEntity or EntityProperty。因此实体可以拥有属性,属性也可以拥有实体,因此存在双向关系。
现在我们说ConcreteEntity延伸AbstractEntity我想创建这样的查询:获取所有类型的实体ConcreteEntity至少有一个属性的名称包含在给定列表中propertyNames。到目前为止,我有以下工作标准查询:

CriteriaQuery<AbstractEntity> cq = cb.createQuery(AbstractEntity.class);
Root<EntityProperty> property = cq.from(EntityProperty.class);
Join<EntityProperty, AbstractEntity> entity = property.join(EntityProperty_.owningEntities);
cq.where(property.get(EntityProperty_.name).in((Object[]) propertyNames));
cq.select(entity);

但现在我只想要那些类型的实体ConcreteEntity。我怎样才能做到这一点? 在JPQL中,我写了“SELECT实体FROM EntityProperty属性JOIN property.owningEntities实体”,在这里我也不知道如何以仅返回特定类型的方式编写它......

感谢您提前的答复!

编辑:将第二个问题移至标准查询:结果列表不明确并删除了代码中的不同(这不起作用)


我知道这是一个老问题,但以防万一有人偶然发现同样的问题,这里是解决方法。 您可以轻松地按实体类型进行过滤,如下所示:

Predicate p = cb.equal(entity.type(), cb.literal(ConcreteEntity.class));

where entity可以是路径(包括根和连接),cb是一个 CriteriaBuilder 对象。所以在你的情况下它会是这样的:

CriteriaQuery<AbstractEntity> cq = cb.createQuery(AbstractEntity.class);
Root<EntityProperty> property = cq.from(EntityProperty.class);
Join<EntityProperty, AbstractEntity> entity = property.join(EntityProperty_.owningEntities);
cq.where(cb.and(
    property.get(EntityProperty_.name).in((Object[]) propertyNames),
    cb.equal(entity.type(), cb.literal.ConcreteEntity.class)
));
cq.select(entity);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Criteria API:按类类型过滤 的相关文章

随机推荐

  • AppKit 中 UIKit 的 [NSString sizeWithFont:constrainedToSize:]

    AppKit 适用于 Mac OS X 上的 Cocoa 中是否有任何等效方法可以与 UIKit 执行相同的操作 NSString sizeWithFont constrainedToSize 如果不是 我怎样才能获得渲染受宽度 高度限制的
  • Swift 2.2 如何更改标签栏控制器的背景颜色

    我一直在尝试更改选项卡栏的背景 并且在 ObjC 中阅读了许多帖子 其中许多帖子都很旧了 但我没有找到任何适用于我正在使用的 Swift 的东西 我终于弄清楚如何从代码中做到这一点 因此标签栏颜色可以随着每个主题颜色的变化而改变 以下是我使
  • 收到错误 java.io.IOException:服务器返回 HTTP 响应代码:401

    我正在尝试对 https url 进行身份验证 但出现异常 下面是代码 import java io BufferedReader import java io IOException import java io InputStream
  • FlexSlider有销毁方法吗

    当异步调用新的画廊列表时 我尝试重新初始化 FlexSlider 而不刷新页面 我认为下面的例程会起作用 但事实并非如此 即使新图像已成功加载 第一个 FlexSlider 似乎仍然存在 有没有办法先破坏然后重建画廊 Thanks func
  • python re 模块中的“[ab]+”等于“(a|b)+”吗?

    我认为 pat1 ab 和 pat2 a b 在 Python python2 7 windows re 模块中作为正则表达式模式具有相同的功能 但我对 ab 和 a b 感到困惑 它们是否具有相同的功能 如果没有 您能解释一下细节吗 Cr
  • OpenCV 中的局部标准化

    我正在尝试在 OpenCV 中实现局部归一化算法 以减少图像中的照明差异 我找到了一个MATLAB 函数 我已经在OpenCV中实现了它 但是 我得到的结果与 MATLAB 函数给出的结果不同 这是我的代码 Mat localNorm Ma
  • 将多个空列添加到 pandas DataFrame

    如何将多个空列添加到DataFrame从列表中 我可以 df B None df C None df D None 但我不能这样做 df B C D None KeyError B C D not in index 你可以使用df rein
  • Firestore 数组中的排序顺序

    我试图更多地了解 Firebase 中的数组 目前 我将地图存储在数组中 其中地图内的字段之一是position我可以在我的移动应用程序中使用它在检索时对数组进行排序并按以下顺序显示结果position The Firebase 上的文档
  • 实现抛射运动

    我在互联网上查找了一些资源 并发现了很多有用的信息 但它们是数学网站 试图告诉我如何解决物体必须处于什么角度才能到达 y 位置 但是 我正在尝试运行模拟 但没有找到任何可以实现代码来模拟抛物线的固体方程 有一些物理知识的人可以帮我解决这个问
  • 检查包含特定字符串的数组列表的方法

    我有一个从数据库导入记录的 ArrayList 有没有什么方法可以检查 arrayList 是否包含我想要与另一个 api 列表匹配的 schname List
  • 什么是初始化块?

    我们可以将代码放入构造函数 方法或初始化块中 初始化块有什么用 是不是每个java程序都必须有它 首先 有两种类型初始化块 实例初始化块 and 静态初始化块 此代码应该说明它们的用法以及它们的执行顺序 public class Test
  • 为 Windows(64 位)编译 SQLite

    我有 MinGW 我想编译SQLite 合并源到 64 位 dll 中 我对这种编译相当陌生 到目前为止我的努力都以失败告终 我首先开始使用 autoconf 合并 并在 Linux 上使用配置和制作工具 但显然这永远不适用于 Window
  • GCC中无法除法的原因是什么

    我的情况很奇怪 每次我尝试编译我的arm项目 LPC2378 codesourcery arm none eabi gcc 4 5 1 时 我在链接时都会遇到相同的错误 media data Projects arm uart main c
  • Jenkins/Hudson SVN 问题

    我的 Jenkins 安装有一个 奇怪的 问题 这基本上导致 SVN 更新在备用基础上失败 堆栈跟踪显示两个问题 hudson util IOException2 revision check failed on my repo and C
  • std::vector::reserve 性能损失

    inline void add const DataStruct rhs using namespace boost assign vec reserve vec size 3 vec rhs a rhs b rhs c 上面的函数执行了大
  • 使用 sqlAlchemy 的存储过程

    如何使用 sqlAlchemy 调用 sql server 的存储过程 发动机和连接有一个execute 方法可以用于任意 sql 语句 会话也是如此 例如 results sess execute myproc param1 param2
  • WPF 数据网格:使用 ItemsSource 时操作无效。

    请参阅下面的 XAML 基本上我正在尝试创建一个分层数据网格
  • Cocoa API 文档下载

    是否可以下载所有 Cocoa API 文档 我必须很多次离线工作 有时一个疑虑会阻碍我所有的工作 Xcode 会自动为您执行此操作 除非您已禁用它 Your Documentation prefs pane should look some
  • Actionbar 顶部的 DrawerLayout

    使用抽屉布局时 有没有办法将抽屉视图覆盖在操作栏上 我不想在显示抽屉时隐藏操作栏 我希望操作栏保持原状 但被发送到后台 iOS Play 音乐应用就是一个例子 我当前的实现是在抽屉状态更改时隐藏和显示操作栏 但我不喜欢这种用户体验 publ
  • Criteria API:按类类型过滤

    我对关系数据库相对陌生 并且在创建查询方面遇到一些问题 首先我想简单地解释一下情况 我有几个实体类 全部都延伸了AbstractEntity or EntityProperty 因此实体可以拥有属性 属性也可以拥有实体 因此存在双向关系 现