Hibernate 如何在hql中使用distinct

Hibernate 如何在hql中使用distinct,hibernate,hql,distinct,Hibernate,Hql,Distinct,我正在使用Hibernate、struts和extjs开发一个web应用程序, 这是我的设想 String hql = "from product"; 在我的产品表中有三列,分别是id、name和section 我需要基于产品不同名称的结果,但我唯一的选择是编写hql,没有其他选择 我可以使用group by,但我需要结果的大小 所以我使用hql.list.get0 在我的代码中,上面的代码是通用方法,即每个dao使用相同的方法 我可以使用连接,但数据以百万计,因此查询的执行速度太慢, 因此,

我正在使用Hibernate、struts和extjs开发一个web应用程序, 这是我的设想

String hql = "from product";
在我的产品表中有三列,分别是id、name和section

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

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

所以我使用hql.list.get0

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

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

这里是我们使用的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关键字,但在某些情况下,它会使用结果转换器来生成不同的结果。例如,当您使用这样的外部联接时:

从订单中选择不同的o左连接提取o.lineItems


在这种情况下,无法在SQL级别过滤出重复项,因此Hibernate在执行SQL查询后使用resultTransformer过滤重复项。

我得到了Hibernate查询语言使用不同字段的答案。您可以使用选择航班路线中的城市。如果使用SQL查询,它将返回字符串列表。不能按实体类使用它返回值。因此,解决这类问题的答案是将HQL与SQL结合使用

来自F航班,其中F航线ID 在中,由SF.TO_城市从航班航线SF组中选择SF.ROUTE_ID

从SQL查询语句中,它得到了不同的路由ID,并作为列表输入。并在查询中从列表中筛选不同的TO_CITY


返回类型是实体Bean类型。因此,您可以使用AJAX(如AutoCompletion)来实现它。

您的问题并不清楚。您想选择什么?不同产品名称的数量?我希望产品数据具有不同的产品名称,主键id具有不同的值,我需要忽略它们。如果我获取数据,我将自动获取计数我需要在同一个表上使用不同的值,但主键id有不同的值我想忽略主键值,我只需要产品名称具有不同值的产品的数据,因为名称是重复的。我曾使用过类似于Select distinct p from product p的查询,但它显示了我想要的所有记录。类似于product p where distinctp.name的查询在hibernate中不存在,但我需要这种类型感谢您的响应jramayThe函数getHibernateTemplate属于Spring框架,而不是标准API。您知道没有使用Spring框架的等价物吗?