Лучший способ конвертировать длинный столбец в строку в Hibernate - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть требование, что мне нужно выполнить аналогичную операцию в критериях гибернации для одного из столбцов в БД, тип данных для этого столбца - «длинный», пробовал по-разному и просматривал, но, к счастью, любые предложения помогут.

Вот что я попробовал:

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 голосов
/ 27 сентября 2018

Пример реализации с использованием собственной функции PostgreSQL TO_CHAR может выглядеть следующим образом:

JPQL

SELECT r FROM Records r 
WHERE FUNCTION('TO_CHAR', r.ID, 'FM9999999999') LIKE :pattern

Criteria 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%");

Ссылка: здесь

...