getresultlist - 查询确定但列表中的数据重复

时间:2012-05-29 07:00:01

标签: java hibernate list duplicates

我对getResultList()有疑问。 执行时我的查询正常,返回700结果。 在返回列表中,我有700个结果,但列表包含重复数据。 所以我没有得到所有结果。

    public List<EscaleCatalogueKaravel> obtenirListeEscaleKaravelSelonMarche(Integer refMarche, Integer refLangue) {
    List<EscaleCatalogueKaravel> listeEscales = entityManager.createQuery("select distinct  p from EscaleCatalogueKaravel p " +
            "where p.refMarche=:refMarche and p.refLangue=:refLangue group by idEscale  ")
            .setParameter("refMarche", refMarche)
            .setParameter("refLangue", refLangue)
            .getResultList();

    if (listeEscales == null || listeEscales.size() == 0) {
        return null;
    }
    return listeEscales;

}

你有个主意吗?

1 个答案:

答案 0 :(得分:1)

你正在使用MySQL,对吗? Oracle不会执行查询,而是抛出错误。

为了正确使用group by子句,您只能选择group by子句中也提到的行(或表达式)。如果选择不在group by子句中的行,则此行可能对一个组的成员具有不同的值。数据库应该返回哪些值? MySQL任意返回一个可能的值,但这是不正确的。

在您的查询中,您要么只执行select distinct idEscale from ...,要么按所有必要的列进行分组,只选择那些列,或者删除group by子句。顺便说一句,distinct也可以在没有group by的情况下使用,并且只有在必要时才应该使用distinct,因为它会使查询变慢。