我正在使用Hibernate,struts和extjs开发Web应用程序, 这是我的情景。
String hql = "from product";
在我的产品表中,有三列是id,name,section
我需要基于产品的不同名称的结果,但我只有选择是编写hql没有其他选项。
我可以使用group by但我需要结果的大小
所以我使用hql.list().get(0);
在上面的代码中,代码是常见的方法,即每个dao都使用相同的方法。
我可以使用连接,但数据是数百万,因此查询执行速度太慢, 所以任何人都可以帮助我如何在hql中编写不同的关键字。
答案 0 :(得分:0)
这是我们使用的一段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将使用不同的SQL关键字,但在某些情况下,它将使用结果转换器来生成不同的结果。例如,当您使用这样的外部联接时:
从Order o left join fetch o.lineItems
中选择不同的o在这种情况下,无法在SQL级别过滤掉重复项,因此Hibernate在执行SQL查询后使用resultTransformer来过滤重复项。
答案 1 :(得分:0)
我有一个Hibernate查询语言的答案,可以使用Distinct字段。您可以使用SELECT DISTINCT(TO_CITY) FROM FLIGHT_ROUTE
。如果使用SQL查询,则返回String List。您不能通过实体类使用它返回值。所以解决这类问题的答案是使用HQL和SQL。
FROM FLIGHT_ROUTE F WHERE F.ROUTE_ID
IN(从SF.TO_CITY中选择SF_ROUTE_ID来自FLIGHT_ROUTE SF GROUP)“;
从SQL查询语句中获取DISTINCT ROUTE_ID
并输入为List。 IN查询从IN(List)过滤掉不同的TO_CITY。
返回类型是实体Bean类型。所以你可以在AJAX中使用它,例如AutoComplement。