回答
如果你的目標是檢查在空虛的一些設置,你可以使用簡單的HQL查詢:
boolean exists = (Long) session.createQuery("select count(*) from PersistentEntity where ...").uniqueResult() > 0
如果我們使用WHERE子句,數據庫可能不得不掃描整個表來計算記錄符合我們的標準,但我們可以限制只搜索一條記錄,這足以說明空虛。
如果沒有任何搜索過濾器,那麼之前的查詢將被允許,因爲數據庫將使用索引進行一些優化。
,所以我想下面的查詢將增加一些性能比較比較前一個:
boolean exists = session.createQuery("from PersistentEntity where ...").setMaxResults(1).uniqueResult() != null;
我用下面的:SELECT COUNT(e) FROM Entity e
。在Spring Data JPA工作得很好。
我得到一個'java.lang.ClassCastException:java.lang.Long不能轉換爲java.lang.Boolean'使用Spring Data查詢。你能展示一個完整的工作例子嗎? – 2015-05-22 08:32:50
嘗試:
與Spring數據"select count(e) > 0 from Entity e where..."
工作正常。
HQL不允許使用exists
聲明。但是你可以用幾種方法:
count(*) > 0
但是這是不好的性能Avoid Using COUNT() in SQL When You Could Use EXISTS()- 使用
boolean exists = session.createQuery("from PersistentEntity where ...").setMaxResults(1).uniqueResult() != null;
但是這將迫使Hibernate來加載所有領域,使水化對象,但你只需要檢查null。 - 使用
session.get(PersistentEntity.class, id) != null
,如果您啓用了二級緩存,這將工作得更快,但如果您需要更多的評論,那麼這將會是一個問題,而不僅僅是id
。 - 您可以使用下面的方法:
getSession().createQuery("select 1 from DTOAny t where ...").uniqueResult() != null)
爲什麼downvotes?對我來說似乎是一個很好的總結。 – Cookalino 2018-02-09 10:22:06
- 1. 慢查詢EXISTS子查詢
- 2. 有EXISTS的子查詢
- 3. MySQL查詢和EXISTS子句
- 4. SQL NOT EXISTS和子查詢
- 5. EXISTS IN查詢如何?
- 6. Hibernate的子查詢
- 7. SQL - 子查詢不引入EXISTS
- 8. SQL NOT EXISTS查詢
- 9. Rails 3.2查詢 - .exists?
- 10. SQL查詢,NOT EXISTS
- 11. SQL查詢IF EXISTS
- 12. SQLAlchemy EXISTS查詢集
- 13. JPA + Hibernate +命名查詢+如何加入子查詢結果
- 14. 如何爲帶有子查詢的查詢編寫HIbernate標準
- 15. Oracle SQL查詢與CASE WHEN EXISTS子查詢優化
- 16. 用等效的EXISTS()查詢替換IN()子查詢
- 17. Hibernate子查詢。存在
- 18. Hibernate子查詢上的ClassCastException
- 19. Hibernate子查詢文檔
- 20. Hibernate的標準子查詢
- 21. 與NOT EXISTS和子查詢混淆
- 22. SQL查詢:在子表中的EXISTS
- 23. EXISTS子查詢導致錯誤1064
- 24. Postgres:與NOT EXISTS相關的子查詢
- 25. MS SQL,子查詢和EXISTS ERROR
- 26. 如何改進hibernate查詢?
- 27. hibernate如何啓動查詢?
- 28. 如何調整Hibernate查詢
- 29. 如何查詢SELECT WHERE EXISTS ......在Django
- 30. 如何鏈接SELECT EXISTS()查詢?
不使用'COUNT(*)'的存在檢查,因爲所有的聚集查詢是不好的性能 https://blog.jooq.org/2016/ 09/14/avoid-using-count-in-sql-when-you-could-use-exists/ – stokito 2016-11-11 18:30:11
哦,那很好。繼續,先生。你在這個答案的五年後,在09.2016指向博客,不喜歡它。 MKEY。 – 2016-11-12 16:59:02
stokito是對的。遲到總比不到好。 – KidA424 2017-02-03 20:24:52