2015-09-04 72 views
1

鑑於下面的JPA查詢是否存在至少具有給定條件的一條記錄,哪條記錄更高效(性能)?有效的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 
+0

在B中,在使用'== 0'之前,您必須投射到'long'或'int',否? –

+0

使用'@ NamedQuery'可能會擊敗這兩種解決方案。 – Tunaki

+0

@AlexandroSifuentesDíaztrue,我只是想讓它在這裏更具可讀性 – mhshams

回答

3

如果你有比富記錄瑣碎的金額,你的數據庫支持像一個LIMIT子句,而JPA實現了一套非常聰明,要使用它,DB將其識別爲等同於EXISTS查詢,則選項1應優於選項2.

這是一個不錯的explanation