hibernate 如何在hql中使用distinct

5cnsuln7  于 2022-12-29  发布在  其他
关注(0)|答案(2)|浏览(198)

我正在使用Hibernate、struts和extjs开发一个Web应用程序,下面是我的场景。

String hql = "from product";

在我的产品表中,有三列:id、name、section
我需要基于产品的独特名称的结果,但我唯一的选择是写hql没有其他选择。
我可以使用group by,但需要结果的大小
所以我使用hql.list().get(0);
在我的代码上面的代码是在共同的方法是每个刀使用相同的方法。
我可以使用连接,但数据是在数百万,所以查询执行太慢,所以可以有任何人帮助我如何在hql中写独特的关键字。

7gs2gvoe

7gs2gvoe1#

下面是我们使用的hql的一个片段(名字已经被修改以保护身份)

String queryString = "select distinct f from Foo f inner join foo.bars as b" +
                " where f.creationDate >= ? and f.creationDate < ? and b.bar = ?";
        return getHibernateTemplate().find(queryString, new Object[] {startDate, endDate, bar});

值得注意的是,HQL中的“distinct”关键字并不直接Map到SQL中的“distinct”关键字。
如果你在HQL中使用“distinct”关键字,那么有时候Hibernate会使用distinct SQL关键字,但是在某些情况下,它会使用结果转换器来产生不同的结果。例如,当你使用外部连接时,如下所示:
从顺序o左连接提取o.lineItems中选择非重复o
在这种情况下,不可能在SQL级别过滤掉重复项,因此Hibernate使用resultTransformer在执行SQL查询之后过滤重复项。

j8ag8udp

j8ag8udp2#

我已经得到了一个Hibernate查询语言使用Distinct字段的答案。你可以使用SELECT DISTINCT(TO_CITY) FROM FLIGHT_ROUTE。如果你使用SQL查询,它返回字符串列表。你不能使用它通过实体类返回值。所以解决这类问题的答案是使用HQL和SQL。
自航班航路F,其中F.航路标识
IN(按SF.TO_CITY从航班_航路SF组中选择SF.航路_ID)";
从SQL查询语句中获取DISTINCT ROUTE_ID并作为列表输入。IN查询从IN(列表)中过滤不同的TO_CITY。
返回类型是实体Bean类型,所以你可以在 AJAX 中使用,比如AutoComplement。

相关问题