【发布时间】:2014-10-14 01:53:33
【问题描述】:
我有一个这样的 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 作为“whatever”运行此代码时,它不会返回任何内容。但是,当我运行相应的 MySql SQL 语句时:
select * from user_account where email like '%whatever%';
它按预期工作。任何想法我的 Java 代码的 JPQL 语句可能有什么问题?
【问题讨论】:
-
JPA 实现调用的 SQL 是 ?在它的日志中。
-
@NeilStockton 好主意。如何找到 JPA 调用的 SQL?记录在哪里?
-
@NeilStockton 没关系,我在这里找到了答案:stackoverflow.com/questions/4362876/…。稍后我将运行代码并在此处发布。
-
这就是我要做的。 1.删除catch块,让异常冒泡,以确保我不会错过它。 2. 使用调试器并检查 searchText 是否是您认为的那样。 3. 用一个空白字符串进行测试并检查它是否检索到表中的所有行。如果所有这些测试都失败了,可能是因为你的表确实是空的,要么是因为你在启动应用程序时清除了它,要么因为你没有使用你认为正在使用的数据库,或者因为你在执行时看到的数据SQL 尚未提交。