我试图弄清楚这个方法的问题是什么,它使用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)
我确定它必须对语法做些什么。但是我犯了错误?
答案 0 :(得分:6)
通常,JPA使用短类名(没有包名)。我个人从未在JPA查询中使用别名,因此我不确定它们是否受到支持。并且您在查询中不需要它们。我不确定=和:之间的空格是否允许。
所以,试试这个:SELECT COUNT(email) FROM Buyer WHERE email=:emailparam
我希望这会奏效。在这种情况下,尝试使用查询并查看哪个更改确实可以正常工作。