【问题标题】:Distinct function with Criteria具有标准的不同功能
【发布时间】:2013-06-17 21:50:49
【问题描述】:

我想使用 Criterias 执行此查询,但似乎没有按预期工作:

SELECT DISTINCT descripcion, id, familia_id, numero_departamento FROM familia WHERE familia_id IS NULL GROUP BY descripcion;

我试过了

public List getFamiliasPadre() {
        Criteria cri = getSession().createCriteria(Familia.class);
        cri.add(Restrictions.isNull("familia.id")).setProjection(Projections.distinct(Projections.property("descripcion")))
                .setProjection(Projections.groupProperty("descripcion"));
        return cri.list();
    }

但它返回的结果就像我正在执行此查询一样

SELECT DISTINCT descripcion FROM familia WHERE familia_id IS NULL GROUP BY descripcion;

它只返回列描述。

我的问题是,我如何告诉 Hibernate 我想要表格的所有列,但我不想重复描述列中的值?

【问题讨论】:

    标签: java mysql hibernate criteria


    【解决方案1】:

    您无法在普通的 SQL 查询中做到这一点。我的意思是,您怎么可能合并仅共享一列的 2 行?例如,假设这是您的桌子:

    • familiaId - 描述 - otro
    • 1) null - 算法 - foo
    • 2) null - 算法 - 条形

    DISTINCT 不可能只应用于一列而将其余列放在一边,因为您希望这两行只有一行。

    【讨论】:

    • 我没有合并两行,我只是将函数 Distinct 应用于一列,它工作正常,它带来了所有唯一的记录,但问题是只带来一列(描述) 我想要表格的所有列。不知道是不是我误会了。
    • 所以让我理解一下,您想要的是获取所有对descripcion 列具有唯一值的行?如果该字段有两行具有相同的值,您不需要其中任何一行?
    • 真的很抱歉,误会的人是我,但是你把剩下的放在一边是什么意思?我只想“删除”查询的重复值。
    • 是的,但您唯一重复的值是描述列。 SELECT DISTINCT 比较您返回的所有列。如果您在查询中添加所有列,您将获得所有行。我希望我试图解释的内容是有道理的。通过合并我的意思是,在我的示例中,您将获得第 1 行和第 2 行,因为它们是不同的,因为您无法将两者结合起来应用某种 DISTINCT。否则,您会为列 otro 获得什么值,来自第一行的值还是来自第二行的值?
    • 知道了,我想现在我将不得不使用 java 代码,而不是使用查询带来我需要的值,因为我还需要来自 numero_departamento 列的一些值。我知道这不可能那么容易。感谢您帮助我弄清楚这一点。
    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2021-12-14
    • 2017-12-25
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多