我有一个像这样的JPQL查询:
@NamedQuery(
name = "UserAccount.searchEmail",
query = "SELECT u FROM UserAccount u WHERE u.email LIKE :searchText")
然后我使用以下代码设置searchText参数:
public List<UserAccount> search(String namedQuery, String searchText) {
Query query = getEntityManager().createNamedQuery(namedQuery);
query.setParameter("searchText", "%" + searchText + "%");
try
{
return query.getResultList();
}
catch(Exception e)
{
logger.log(Level.SEVERE, "Error when searching UserAccount",e);
}
return null;
}
正如我的JPQL NamedQuery所述,UserAccount有一个名为email的字段。当我使用serachText运行此代码作为“无论什么”时,它不会返回任何内容。但是,当我运行相应的MySql SQL语句时:
select * from user_account where email like '%whatever%';
它按预期工作。我的Java代码的JPQL语句可能有什么问题吗?
答案 0 :(得分:0)
我找到了答案。在我调用错误的NamedQuery时,这是一个逻辑错误。我想自己回答这个问题,因为在评论中我注意到我应该查看正在执行的REAL
SQL。这让我可以看到发生了什么。
如果您不确定如何做到这一点......就像我一样,我在评论中发布了答案的链接。