Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set a limit to inner query in Hibernate?

I have HQL like this:

from Table1 t1 where t1.name not in (select t2.name from Table2 t2 order by t2.date limit 10)

The problem is it doesn't understand limit keyword. Is there a way to run such query without splitting it into two subqueries?

like image 571
serg Avatar asked Apr 29 '10 16:04

serg


People also ask

Can we use limit in inner query?

There is no such limit for inner query. 50000 records per transaction will be applied here. For example your org contain only 2 Account and each have 10 Contacts. Then the total number of Query rows will be 22 (2+10+10).

Can you tell the difference between setMaxResults () and setFetchSize () of query?

setMaxResults limits the number of results the query will ever get. setFetchSize tells the jdbc driver how many rows to return in one chunk, for large queries.

How many ways we can write query in hibernate?

To create query in the Hibernate ORM framework, there is three different types. The following are the three ways to create query instance: session. createQuery()


2 Answers

look at How do you do a limit query in HQL?

you can't limit a query written in hql with hql. You need to make a call to setMaxResults on the Query object, which i guess will prevent you from applying a limit on a hql subquery.

This leave you with the option of

  • writting it as a sql-query or
  • trying to find another way to write your hql query so that you don't need a limit in a subquery.
like image 68
Thierry Avatar answered Oct 14 '22 06:10

Thierry


If you submit the query as an SQLQuery and then add your class as an entity, you can use limit, as the query is submittet as sql. You have to use sql Syntax though.

String sql = "select * from Supplier limit 1";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Supplier.class);
List results = query.list();

--> (also working with subselects)

like image 35
flyinaway Avatar answered Oct 14 '22 04:10

flyinaway