Hibernate: how to make EXISTS query? (not subquery)

Ron picture Ron · Apr 13, 2011 · Viewed 33.1k times · Source

For example:

EXISTS ( SELECT * FROM [table] WHERE ... )

How to make such query using Hibernate?

Answer

Sergey Ponomarev picture Sergey Ponomarev · Nov 11, 2016

HQL doesn't allow to use exists statement. UPD Starting from Hibernate 5 it supports it as a predicate in WHERE

You can use several approaches:

  1. For Hibrnate 5: you can use subquery with the same table boolean exists = session.createQuery("select 1 from PersistentEntity where exists (select 1 from PersistentEntity p where ...)").uniqueResult() != null;. Thank to author bellow.
  2. count(*) > 0 but this is bad for performance Avoid Using COUNT() in SQL When You Could Use EXISTS()
  3. Use boolean exists = session.createQuery("from PersistentEntity where ...").setMaxResults(1).uniqueResult() != null; but this will force Hibernate to load all fields and make hydration to object even if you need just to check for a null.
  4. Use session.get(PersistentEntity.class, id) != null and this will work faster if you enabled second level cache but it will be a problem if you need more criteries than just id.
  5. You can use the following method: getSession().createQuery("select 1 from PersistentEntity where ...").uniqueResult() != null)