有没有办法在HQL中编写这个SQL?

问题描述 投票:1回答:2

我需要使用Hibernate(HQL)在MySQL中运行此查询:

SELECT t.atrib2, MY_FUNC(attrib1), MY_FUNC(attrib2), o.atrib1
       FROM (SELECT t.atrib1, t.atrib2, t.atrib3,o.atrib1
             FROM myTable t JOIN otherTable o
                  ON O.ID = T.O_ID   
                  ORDER BY creationDate
                  LIMIT 0, 100000) t;

我不能像这样使用SELECT:

SELECT t.atrib2, MY_FUNC(attrib1), MY_FUNC(attrib2), o.atrib1
       FROM myTable t JOIN otherTable o
       ON o.ID = t.o_ID   
       ORDER BY creationDate
       LIMIT 0, 100000;

因为MySQL在加入表时将函数MY_FUNC应用于所有行,并且这变得太慢,如线程:MySQL very slow query with custom function in spite of LIMIT

如何使用HQL在本文中正确编写第一个查询?

mysql sql hibernate hql
2个回答
0
投票

是的,在hibernate中你可以使用SQLQuery来编写SQL查询而不是HQL。喜欢:

 String sql = "select * from User" ;
  SQLQuery query = session.CreateSQLQuery(sql);

0
投票

你可以通过使用持久性Api的“entityManager.createNativeQuery”aur“entityManager.createQuery”来实现这一点。

String queryString =“SELECT t.atrib2,MY_FUNC(attrib1),MY_FUNC(attrib2),o.atrib1 FROM(SELECT t.atrib1,t.atrib2,t.atrib3,o.atrib1 FROM myTable t JOIN otherTable o ON O.ID = T.O_ID ORDER BY creationDate LIMIT 0,100000)t“; javax.persistence.Query query = entityManager.createNativeQuery(queryString);

© www.soinside.com 2019 - 2024. All rights reserved.