【问题标题】:JPQL LIKE not workingJPQL LIKE 不工作
【发布时间】: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 尚未提交。

标签: jpa jpql


【解决方案1】:

我找到了答案。对我来说,调用错误的 NamedQuery 是一个逻辑错误。我想自己回答这个问题,因为 cmets 中指出我应该查看正在执行的REAL SQL。这就是让我看到正在发生的事情的原因。

如果您不确定如何操作...和我一样,我在 cmets 中发布了一个指向答案的链接。

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多