高效的JPA查询,以查找是否存在给定条件的至少一条记录

时间:2015-09-04 15:33:49

标签: java jpa orm

根据JPA查询,查找是否存在至少一条具有给定条件的记录,哪一条更有效(性能)?

A)

boolean notFound = entityManager
       .createQuery("SELECT f.id FROM Foo f WHERE f.active = true")
       .setMaxResults(1)
       .getResultList()
       .isEmpty();

B)

boolean notFound = entityManager
     .createQuery("SELECT COUNT(f.id) FROM Foo f WHERE f.active = true")
     .getSingleResult() == 0

1 个答案:

答案 0 :(得分:3)

如果你有超过一小部分的Foo记录,你的数据库支持像LIMIT子句,并且JPA impl足够聪明地使用它,并且DB认为它等同于EXISTS查询,那么选项1应该超越选项2。

这是一个不错的explanation