2011-03-06 4 views
2

JPQL을 사용하여이 데이터베이스에 이미 전자 메일이 있는지 확인하는이 방법의 문제점을 파악하려고합니다. 작동하지 않습니다. 누군가가 외모를 가질 수 있습니까? 아니면 다른 대체 질의를 더 간단하게?DB (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 (이클립스 지속성 서비스 - 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