在Hibernate中将长列转换为String的最佳方法

时间:2018-09-27 18:48:25

标签: java spring-data-jpa hql hibernate-criteria

我有一个要求,我需要在休眠条件中对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()+"%"));

1 个答案:

答案 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