我试图写一个类似条款JPQL查询:
LIKE '%:code%'
我想有码= 4,找到
455 554 646 ...
我无法通过:code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
因为在另一个地方,我需要:value
不被包裹%
字符。 任何帮助吗?
我试图写一个类似条款JPQL查询:
LIKE '%:code%'
我想有码= 4,找到
455 554 646 ...
我无法通过:code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
因为在另一个地方,我需要:value
不被包裹%
字符。 任何帮助吗?
如果你这样做
LIKE :code
然后做
namedQuery.setParameter("code", "%" + this.value + "%");
然后值保持从“%”标志免费。 如果你需要在同一个查询的其他地方使用它只需使用比“代码”之外的其他参数名称。
我不使用命名参数为所有查询。 例如,它是不寻常的使用命名参数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第一索引。 位置是从1开始的。 如果未找到字符串,返回0。
FYI:对文档我的前谷歌打了参数逆转。
SELECT
e
FROM
entity e
WHERE
(0 < LOCATE(:searchStr, e.property))
我不知道如果我迟到或超出范围,但在我看来,我能做到这一点,如:
String orgName = "anyParamValue";
Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'");
q.setParameter("orgName", orgName);
There is nice like() method in JPA criteria API. Try to use that, hope it will help.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(Employees.class);
Root<Employees> rootOfQuery = criteriaQuery.from(Employees.class);
criteriaQuery.select(rootOfQuery).where(cb.like(rootOfQuery.get("firstName"), "H%"));
刚刚离开了“”
LIKE %:code%
从教师选择I I其中i.address LIKE CONCAT( '%',:地址, '%')“);
使用下列标准代码相同:
}