类似子句 JPQL 中的参数

2022-08-31 10:25:45

我正在尝试用like子句编写一个JPQL查询:

LIKE '%:code%'

我想有代码= 4并找到

455
554
646
...

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

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

因为在另一个地方,我不需要用字符包裹。有什么帮助吗?:value%


答案 1

如果您这样做

LIKE :code

然后做

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

然后值保持没有“%”符号。如果需要在同一查询中的其他位置使用它,只需使用“code”以外的其他参数名称即可。


答案 2

我不会对所有查询都使用命名参数。例如,在 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


推荐