Запрос необходим для проверки того, что электронная почта уже существует в БД (Java Persistence API) - PullRequest
2 голосов
/ 06 марта 2011

Я пытаюсь выяснить, в чем проблема с этим методом, который использует JPQL для проверки, если электронная почта уже существует в БД, по какой-то причине она не работает.Кто-то может взглянуть?Или дать другой альтернативный запрос более простой?

@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 Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.JPQLException Исключение Описание: Синтаксическая ошибка при анализе запроса [SELECT COUNT (b.email) FROM entity.Buyer b WHERE b.email =: emailparam], строка 1, столбец35: синтаксическая ошибка в [.].Внутреннее исключение: MismatchedTokenException (83! = 78)

Я уверен, что он должен что-то делать с синтаксисом.Но где я совершаю ошибку?

1 Ответ

6 голосов
/ 06 марта 2011

Обычно JPA использует короткие имена классов (без имени пакета).Лично я никогда не использовал псевдонимы в запросах JPA, поэтому я не уверен, что они там поддерживаются.И они вам не нужны в вашем запросе.И я не уверен, что пробел между = и: разрешен.

Итак, попробуйте это: SELECT COUNT(email) FROM Buyer WHERE email=:emailparam

Я надеюсь, что это будет работатьВ этом случае попробуйте поиграть с запросом и посмотреть, какое из изменений действительно работает.

...