当前位置: 首页 > 知识库问答 >
问题:

左连接中附加条件的HQL等效值

汪博达
2023-03-14

我有冬眠实体:

  • 组织(有2个ManyTo多人映射(常规人员列表和特权人员列表))

有没有办法使HQL等效于此查询?

    select distinct p.id, p.lastAndFirstName
    from organizations o
    left join organization2person op on op.organization_id=o.id
    left join organization2privileged_person opp on opp.organization_id=o.id
    left join sys_persons p on p.id=op.person_id or p.id=opp.person_id
    order by p.lastAndFirstName

我不知道如何在最后一个左连接中创建条件p.id=op.person\u id或p.id=opp.person\u id。我看到了带有关键字的,但它创建了带有“AND”的条件,而不是“OR”。

共有1个答案

田琛
2023-03-14

它可能看起来像这样。

基于非常缺乏的细节,听起来您需要子查询。但您可以考虑从人员方面反向映射这些关联。这可能不会更有效率,但可能会让你的生活更轻松。

select p.id, p.lastAndFirstName from Person p
   where p.id in
   (select p2.id from Organization o 
        left join op.persons p2)
   or p.id in
   (select p3.id 
       left join o.privilegedPersons p3)

(顺便说一句,我不知道你想对sys\u人员做什么)

 类似资料:
  • 我正在使用Ingres 11.0 DB,不确定它是否在其他数据库引擎上具有相同的行为,但这里是它 它不会返回表1中的所有记录,但我使用的是左连接,它应该从T1返回aa记录,从t2只处理行,只返回1条记录 如果我将其中一个条件从where子句移动到join条件,它的开始将返回我所期望的结果 问题是为什么它不工作在哪里所有搜索条件在哪里子句,但工作时,我移动t2.id_number从哪里加入条件? 我

  • 有可能在QueryDSL中执行以下查询吗? 库存余额存储每个零件号/月/年的库存数据;我只需要当前年份和月份的数据。 我已经得到了基本的左连接: 这就产生了正确的sql,但只是在零件号上连接。 检查生成的零件的库存可用性(除其他外)。左连接是必要的,因为我仍然需要没有库存条目的部件(例如新部件)。Left join将获取没有匹配库存余额的行,但在查询的where子句中添加等将删除没有库存余额的行号

  • 问题内容: 我已经尝试解决这个问题一段时间了,希望有人能帮助我。我有两个桌子,第一个桌子是 表名:OnlineTest 第二张表是 表名称:UserStatus 结果 我已经试过这个查询, 但是此查询将带出结果的前两行,而不是最后两行,其中userId和status为null。 如何带来以上结果? 问题答案: 将谓词放在子句中: 这将返回的所有行,其中谓词失败的列填充为。

  • 问题内容: 我有两个实体:和。我正在使用Hibernate 3.6。 如何使用hibernate标准实现这一目标,最重要的是,我必须将其用于分页。 而“我的道”如下所示以显示jqgrid中的“问题”列表 公共列表showHelpDeskIssues(DetachedCriteria dc,int from,int size){ 问题答案: 您可以尝试以下 这里parent是中的属性名称,child

  • 带hibernate的JSF应用程序 有没有一种方法可以使用联接来过滤条件列表返回的结果<我有两张桌子。订单和顾客。 我需要返回丢失电子邮件地址的客户的所有订单,以及所有order.billingCustomeId=null和CustomeId=nullorder.shipping订单。 客户可以在或上进行匹配。 我将使用的SQL Hibernate标准 这将返回billing/shipping

  • 问题内容: 我有2个实体,和。它们是相关的,但是我不想将关系映射添加到bean。 我们如何 在 HQL或条件之间使用 左外部 联接 并 使用它们 ? 有一些解决方法, 按照此处所述使用本机SQL 。 添加关系并使用 从A选择a a左连接ab 。 我们可以在HQL中进行 内部 联接,例如从A a,B b中选择*,其中a.some = b.some 我一直回头看这两个选项,这还有其他选择吗?还是这不可