需要查询以检查数据库中是否已存在电子邮件(Java Persistence API)

时间:2011-03-06 16:00:46

标签: java jpa java-ee java-ee-6 jpql

我试图弄清楚这个方法的问题是什么,它使用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 entities.Buyer b WHERE b.email =:emailparam],第1行,第35列:[。]处的语法错误。   内部异常:MismatchedTokenException(83!= 78)

我确定它必须对语法做些什么。但是我犯了错误?

1 个答案:

答案 0 :(得分:6)

通常,JPA使用短类名(没有包名)。我个人从未在JPA查询中使用别名,因此我不确定它们是否受到支持。并且您在查询中不需要它们。我不确定=和:之间的空格是否允许。

所以,试试这个:SELECT COUNT(email) FROM Buyer WHERE email=:emailparam

我希望这会奏效。在这种情况下,尝试使用查询并查看哪个更改确实可以正常工作。