类似JPQL语句中的参数

我正在尝试用类似的子句写一个JPQL查询:

LIKE '%:code%' 

我想有代码= 4,并find

 455
 554
 646
 ...

我无法通过:code = '%value%'

 namedQuery.setParameter("%" + this.value + "%"); 

因为在另一个地方我需要:value没有包裹的%字符。 任何帮助?

如果你这样做

 LIKE :code 

然后呢

 namedQuery.setParameter("code", "%" + this.value + "%"); 

然后,值仍然不受“%”符号的影响。 如果您需要在同一个查询中的其他地方使用它,只需使用“code”以外的其他参数名称即可。

我不使用所有查询的命名参数。 例如,在JpaRepository中使用命名参数是不常见的。

要解决方法,我使用JPQL CONCAT函数(此代码模拟开始 ):

 @Repository public interface BranchRepository extends JpaRepository<Branch, String> { private static final String QUERY = "select b from Branch b" + " left join b.filial f" + " where f.id = ?1 and b.id like CONCAT(?2, '%')"; @Query(QUERY) List<Branch> findByFilialAndBranchLike(String filialId, String branchCode); } 

我发现这个技术在优秀的文档: http : //openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa_overview_query.html

您可以使用JPA LOCATE函数 。

LOCATE(searchString,candidateString [,startIndex]) :返回candidateString中searchString的第一个索引。 职位以1为基础。 如果找不到string,则返回0。

仅供参考: 我最喜欢的谷歌命中的文档有相反的参数。

 SELECT e FROM entity e WHERE (0 < LOCATE(:searchStr, e.property)) 

只要不要说“

 LIKE %:code% 
Interesting Posts