1

我正在努力在 Java Spring 应用程序中使用 Like 表达式创建 JPQL 语句。我的目标是实现简单的不区分大小写的搜索功能。

我的代码应该返回名称中包含关键字的公司列表,如下所示:

    List<Company> companies = em.createQuery("select cmp from JI_COMPANIES as companies where UPPER(cmp.name) LIKE :keyWord", Company.class)
            .setParameter("keyWord","%" + keyWord.toUpperCase() + "%").getResultList();
    return companies;

但是,此查询仅在我的关键字与公司名称匹配时才有效(未使用 Like 语句)。

在测试上述功能时,我在来自 Hibernate 的控制台消息中看到:

Hibernate: select ... /* all my parameters */ ... where company0_.CMPN_NAME=?

似乎我的查询被翻译成 cmpn_name='name' 而不是使用 like 表达式。

4

2 回答 2

0

你可以看看Hibernate batch processing best practices 和Stateless session

于 2013-09-10T13:03:34.923 回答
0

由于不了解 Spring Data JPA 库的工作原理,这是我的错。

我尝试创建 myCompanyRepository 的自定义实现(myCompanyRepository 扩展了 JpaRepository、CompanyRepositoryCustom)。

我上面提到的代码位于实现 CompanyRepositoryCustom 接口的 CompanyRepositoryCustomImpl 类中。但是我使用了方法名称“findCompaniesByName(String name)”。JPA 自动从这个方法名称创建一个查询,我的实现没有被使用。

这是 Spring Data JPA 参考的链接

于 2013-09-10T14:14:04.263 回答