2011-03-06 57 views
2

我試圖找出使用JPQL驗證電子郵件是否已存在於數據庫中的此方法的問題,由於某些原因不起作用。有人可以看看?或者給另一個替代查詢更簡單?查詢需要檢查數據庫中是否已存在電子郵件(Java Persistence API)

@Override 
public boolean emailAlreadyExists(String value) { 
    Query checkEmailExists = em.createQuery("SELECT COUNT(b.email) FROM " 
      + Buyer.class.getName() + " b WHERE email = :emailparam"); 
    checkEmailExists.setParameter("emailparam", value); 
    long matchCounter = 0; 
    matchCounter = (Long) checkEmailExists.getSingleResult(); 
    if (matchCounter > 0) { 
     return true; 
    } 
    return false; 
} 

這是控制檯輸出的一部分:

所致:異常[的EclipseLink-8024](Eclipse持久服務 - 2.0.1.v20100213-r6600):org.eclipse.persistence。 exceptions.JPQLException 異常說明:解析查詢的語法錯誤[SELECT COUNT(b.email)FROM entities.Buyer b WHERE b.email =:emailparam],第1行,第35列:語法錯誤[[]]。 內部例外:MismatchedTokenException(83!= 78)

我確定它必須對語法做些什麼。但是,我犯了什麼錯誤?

回答

6

通常,JPA使用簡短的類名(不帶包名)。而且我個人從未在JPA查詢中使用別名,所以我不確定它們在那裏是否受支持。你的查詢中不需要它們。而且我不確定=和之間的空間是否允許。

所以,試試這個:SELECT COUNT(email) FROM Buyer WHERE email=:emailparam

我希望這會工作。在這種情況下,嘗試使用查詢並查看哪項更改確實能夠完成此項工作。

+0

Tnx爲您的答案。這是正確的,但只有一件小事沒有工作,但這就是主意。這裏是工作查詢:SELECT COUNT(b.email)FROM Buyer b WHERE b.email =:emailparam – sfrj 2011-03-07 08:34:31

相關問題