如何在hql中使用distinct

发布于 2025-01-04 02:40:34 字数 382 浏览 1 评论 0原文

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

String hql = "from product";

在我的产品表中,三列有 id、名称、部分,

我需要基于产品的不同名称的结果,但我唯一的选择是编写 hql,没有其他选项。

我可以使用 group by 但我需要结果的大小

,所以我使用 hql.list().get(0);

在我的代码中,上面的代码是通用方法,即每个 dao 使用同样的方法。

我可以使用联接,但数据以百万计,因此查询的执行速度太慢, 那么任何人都可以帮助我如何在 hql 中编写不同的关键字。

I am working on a web application using Hibernate, struts and extjs,
Here is my scenario.

String hql = "from product";

In my product table three columns are there id, name, section

I need the results based on distinct name of product but i have only option is writing hql no other option is there.

I can use group by but i need the size of the result

so i am using hql.list().get(0);

In my code above code is in common method that is every dao uses the same method.

I can use joins but the data is in millions so execution of query is too slow,
So can any one help how can i write distinct keyword in hql.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回忆那么伤 2025-01-11 02:40:34

这是我们使用的 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”关键字并不直接映射到 SQL 中的“distinct”关键字。

如果你在HQL中使用“distinct”关键字,那么有时Hibernate会使用distinct SQL关键字,但在某些情况下它会使用结果转换器来产生不同的结果。例如,当您使用如下所示的外连接时:

select different o from Order o left join fetch o.lineItems

在这种情况下,不可能在 SQL 级别过滤掉重复项,因此 Hibernate 使用 resultTransformer 来过滤重复项 AFTER已执行 SQL 查询。

Here's a snippet of hql that we use. (Names have been changed to protect identities)

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});

It's worth noting that the "distinct" keyword in HQL does not map directly to the "distinct" keyword in SQL.

If you use the "distinct" keyword in HQL, then sometimes Hibernate will use the distinct SQL keyword, but in some situations it will use a result transformer to produce distinct results. For example when you are using an outer join like this:

select distinct o from Order o left join fetch o.lineItems

It is not possible to filter out duplicates at the SQL level in this case, so Hibernate uses a resultTransformer to filter duplicates AFTER the SQL query has been performed.

苍风燃霜 2025-01-11 02:40:34

我已经得到了 Hibernate Query Language to use Distinct fields 的答案。您可以使用SELECT DISTINCT(TO_CITY) FROM FLIGHT_ROUTE。如果使用SQL查询,它返回字符串列表。您不能通过实体类使用它的返回值。因此,解决此类问题的答案是使用 HQL 和 SQL。

从 FLIGHT_ROUTE F 出发,前往 F.ROUTE_ID
IN (从 FLIGHT_ROUTE SF GROUP BY SF.TO_CITY 选择 SF.ROUTE_ID)";

从SQL查询语句中得到DISTINCT ROUTE_ID并作为列表输入。IN查询从IN(列表)中过滤不同的TO_CITY 返回类型

是 Entity Bean 类型,因此您可以在 AJAX 中使用它,例如 AutoComplement。

I have got a answer for Hibernate Query Language to use Distinct fields. You can use SELECT DISTINCT(TO_CITY) FROM FLIGHT_ROUTE. If you use SQL query, it return String List. You can't use it return value by Entity Class. So the Answer to solve that type of Problem is use HQL with SQL.

FROM FLIGHT_ROUTE F WHERE F.ROUTE_ID
IN (SELECT SF.ROUTE_ID FROM FLIGHT_ROUTE SF GROUP BY SF.TO_CITY)";

From SQL query statement it got DISTINCT ROUTE_ID and input as a List. And IN query filter the distinct TO_CITY from IN (List).

Return type is Entity Bean type. So you can it in AJAX such as AutoComplement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文