我正在努力使用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表达式。
答案 0 :(得分:0)
您可以查看Hibernate batch processing最佳做法和Stateless session。
答案 1 :(得分:0)
由于不了解Spring Data JPA库的工作原理,这是我的错。
我尝试创建myCompanyRepository的自定义实现(myCompanyRepository extends JpaRepository,CompanyRepositoryCustom)。
我上面提到的代码位于我的CompanyRepositoryCustomImpl类中,该类实现了CompanyRepositoryCustom接口。但是我使用了方法名“findCompaniesByName(String name)”。 JPA会自动从此方法名称创建查询,但不会使用我的实现。