【问题标题】:Order by doing an inner join automatically通过自动进行内部连接进行排序
【发布时间】:2017-12-12 22:27:51
【问题描述】:

我希望我的查询使用 hql 返回按某些列排序的一些值。

问题是当我order by 它会自动进行内部连接。 示例:

表 Usuario 有列 idAssociado:

select u.nome 
from Usuario u
order by u.associado desc,
         u.associado.suspended asc, 
         u.associado.dateOut asc

我想从 Usuario 返回所有记录,即使列 associado(id) 为空,但首先将那些不为空的记录带入,然后按暂停和 dateOut 排序。

当我 order by suspended and dateOut 时,它会进行内部连接并仅返回 Usuarios where u.associado is not null

如何执行此 hql 并获得预期结果?

谢谢

【问题讨论】:

  • 如果u.associado 是对列的有效引用,那么u.associado.suspendedu.associado.dateOut 也不能是有效引用。
  • 好的,我明白发生了什么,但我不知道如何归档这种情况下的预期结果。

标签: mysql sql database hibernate hql


【解决方案1】:

如果您的类中的属性位于 POJO 对象中,HQL 会执行 INNER JOIN 操作。

在您的Usuario 类中,您可能有一个属性associado,类型为Associado

因此,当您指向关联对象 HQL 的封装属性时,应用 INNER JOIN。

如果你在 associado 为空时想要所有 usuario 对象,为什么你要按照你在 associado 中封装信息的信息排序?

对我来说,你的查询会变成:

select u.nome 
from Usuario u
where u.associado is null

【讨论】:

  • 我也想要那些不为空的人......无论如何......如何,从你的sktrech开始,我可以返回按u.associado.suspended和u.associado.dateOut排序的数据?我的意思是当你使用这些itens来订购时,它会自动删除非空值......我明白为什么,但是如何解决呢?
猜你喜欢
  • 2017-11-09
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多