我有一个要求,我需要在休眠条件中对DB的其中一个列执行类似的操作,该列的数据类型为“ long”,尝试了不同的方法,但浏览没有成功,任何建议都会有所帮助。
这是我尝试过的:
1) predicates.add(builder.like(root.<String>get("id"), "%"+params.getId()+"%"));
2) predicates.add(builder.like(root.get("id").as(String.class), "%"+params.getId()+"%"));
答案 0 :(得分:0)
使用PostgreSQL原生TO_CHAR函数的示例实现如下所示:
JPQL
SELECT r FROM Records r
WHERE FUNCTION('TO_CHAR', r.ID, 'FM9999999999') LIKE :pattern
标准API
Path<String> id = r.get("ID");
Expression<String> format = cb.literal("FM9999999999");
Expression<String> function= cb.function("TO_CHAR", String.class, id, format);
ParameterExpression<String> pattern = cb.parameter(String.class, "pattern");
Predicate like = cb.like(function, pattern);
cq.where(like);
您还可以将查询作为单行构建:
cq.where(cb.like(cb.function("TO_CHAR", String.class, r.get("ID"), cb.literal("FM9999999999")), cb.parameter(String.class, "pattern")));
执行以上查询:
Query q = em.createQuery(cq).setParameter("pattern", "10%");
参考:here