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

sfr*_*frj 2 java jpa jpql java-ee java-ee-6

我试图弄清楚这个方法的问题是什么,它使用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;
}
Run Code Online (Sandbox Code Playgroud)

这是控制台输出的一部分:

引发者:异常[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)

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

Ale*_*exR 6

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

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

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