我需要使用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在本文中正确编写第一个查询?
是的,在hibernate中你可以使用SQLQuery来编写SQL查询而不是HQL。喜欢:
String sql = "select * from User" ;
SQLQuery query = session.CreateSQLQuery(sql);
你可以通过使用持久性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);