Java Spring,JPA - 类似于带通配符的表达式

时间:2013-09-10 12:39:43

标签: spring hibernate jpa jpql

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

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

    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;

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

在测试上面的函数时,我在Hibernate的控制台消息中看到了:

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

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

2 个答案:

答案 0 :(得分:0)

您可以查看Hibernate batch processing最佳做法和Stateless session

答案 1 :(得分:0)

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

我尝试创建myCompanyRepository的自定义实现(myCompanyRepository extends JpaRepository,CompanyRepositoryCustom)。

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

Here is the link for Spring Data JPA reference