【问题标题】:HQL DISTINCT doesn't workHQL DISTINCT 不起作用
【发布时间】:2012-10-21 14:03:51
【问题描述】:

我搜索了整个论坛;几乎每个答案都涉及到这一点,但没有帮助。 我的 DAO 中有以下查询,但它不起作用,我不明白为什么?

这是我的完整方法:

public List<RwTac> findAll(){
        String sql = "select distinct v from RwTac v " +
                     "order by v.vendor" ;
        Query query = sessionFactory.getCurrentSession().createQuery(sql);
        return query.list();
    }

谢谢。

【问题讨论】:

  • RwTac 表中是否有名为 v 的列?
  • 没有;查询正常工作,并在这里给我带来称为“v”的供应商,但它们不是唯一的......
  • 您是否在您的实体中实现了equalshashCode
  • 重命名别名没有帮助。 @SJuan76 不,我没有帮助吗?
  • DISTINCT 将通过以下两种方式之一为您提供独特的结果:通过在 SQL 中执行 DISTINCT 或通过检查结果并删除重复项。我不确定hibernate是如何做到的,但我认为这不是第一种方式,从那时起你就不会遇到这个麻烦了。如果是第二个,那么您需要 equals()hashCode() 以便 Hibernate 可以确定哪些是重复项。

标签: java hibernate hql dao


【解决方案1】:

我不知道你想得到什么样的结果。

在你的 HQL 中选择

"select distinct v from RwTac v order by v.vendor"

您将获得至少在一列中不同的所有行 - 在大多数情况下,这将是表的所有行(除非您的表没有唯一键并且它具有完整的双精度)。

如果你想有一个供应商列表,列表中没有供应商两次,那么你需要这个选择

"select distinct v.vendor from RwTac v order by v.vendor"

【讨论】:

    猜你喜欢
    • 2013-09-18
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多