【问题标题】:Hibernate 4 Distinct and order by togetherHibernate 4 Distinct 和 order by 一起
【发布时间】:2015-09-19 06:00:40
【问题描述】:
select distinct groupMember.proUcer.proUserDetail 
from proGroupMembership groupMember 
where groupMember.proGroup.id =:groupId and groupMember.status = 1 
order by groupMember.proUcer.proUserDetail.firstName

ORA-01791 异常 当我执行这个查询时来了。 经过多次研究,我得到了解决这个问题的解决方案,方法是再选择一个我们正在应用订单的列 - 所以我根据该解决方案转换查询

select distinct groupMember.proUcer.proUserDetail, groupMember.proUcer.proUserDetail.firstName 
from proGroupMembership groupMember 
where groupMember.proGroup.id =:groupId and groupMember.status = 1 
order by groupMember.proUcer.proUserDetail.firstName

现在我的问题是我只需要对象列表,但 query.list() 返回对象数组列表。 请帮我解决这个问题。

【问题讨论】:

  • 您的意思是在输出中只需要不同的 groupMember.proUcer.proUserDetail 而不需要 groupMember.proUcer.proUserDetail.firstName??
  • 是的 Utsav 我只需要 groupMember.proUcer.proUserDetail 的列表。
  • 好的。我不是 java/hibernate 人,但如果您使用的是 Oracle 11+,那么这应该可以。 with tbl(proUserDetail) as (*your second query*) select proUserDetail from tbl如果没有请告诉我。
  • 不,我使用的是 oracle 10g。它可以在 oracle 10g 中运行吗?
  • 试一试。将 ... 替换为您剩余的第二个查询。我只是为不同的列名使用了别名with tbl as (select distinct groupMember.proUcer.proUserDetail as distUserDetail, <....rest of the second query> ) select distUserDetail from tbl

标签: java sql database oracle hibernate


【解决方案1】:

不要在这样的查询中重复自己。使用连接:

select distinct proUserDetail 
from proGroupMembership groupMember 
join groupMember.proUcer proUcer
join proUcer.proUserDetail proUserDetail
where groupMember.proGroup.id = :groupId and groupMember.status = 1 
order by proUserDetail.firstName

【讨论】:

  • 谢谢,但它不起作用。像 proGroupMembership 这样的休眠异常未映射 [选择不同的 ..
  • 嘿@JB 现在它为我工作了。我使用的是表名而不是实体名。谢谢
  • 嘿@JB 我已经使用了这个查询,但它返回了额外的行(比预期的多)。你知道为什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 2021-07-12
  • 2013-01-25
相关资源
最近更新 更多