【问题标题】:Java Spring, JPA - like expression with wildcardJava Spring,JPA - 类似于通配符的表达式
【发布时间】:2013-09-14 04:21:26
【问题描述】:

我正在努力在 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 表达式。

【问题讨论】:

    标签: spring hibernate jpa jpql


    【解决方案1】:

    您可以查看Hibernate batch processing 最佳实践和Stateless session

    【讨论】:

      【解决方案2】:

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

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

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

      Here is the link for Spring Data JPA reference

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-30
        • 2018-05-05
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        相关资源
        最近更新 更多