我正在使用Hibernate、struts和extjs开发一个Web应用程序,下面是我的场景。
String hql = "from product";
在我的产品表中,有三列:id、name、section
我需要基于产品的独特名称的结果,但我唯一的选择是写hql没有其他选择。
我可以使用group by,但需要结果的大小
所以我使用hql.list().get(0);
在我的代码上面的代码是在共同的方法是每个刀使用相同的方法。
我可以使用连接,但数据是在数百万,所以查询执行太慢,所以可以有任何人帮助我如何在hql中写独特的关键字。
2条答案
按热度按时间7gs2gvoe1#
下面是我们使用的hql的一个片段(名字已经被修改以保护身份)
值得注意的是,HQL中的“distinct”关键字并不直接Map到SQL中的“distinct”关键字。
如果你在HQL中使用“distinct”关键字,那么有时候Hibernate会使用distinct SQL关键字,但是在某些情况下,它会使用结果转换器来产生不同的结果。例如,当你使用外部连接时,如下所示:
从顺序o左连接提取o.lineItems中选择非重复o
在这种情况下,不可能在SQL级别过滤掉重复项,因此Hibernate使用resultTransformer在执行SQL查询之后过滤重复项。
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。