类似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%