2011-03-06 32 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

相关问题