Как конфертировать из Expression в CriteriaBuilder в JPA

1

У меня есть код, который использует устаревшее Expression

Criteria criteria = getSession().createCriteria(TagSynonym.class);
criteria.add(Expression.like("title", "%"+piece+"%") );
criteria.setFirstResult(0);
criteria.setMaxResults(maxTagsInResult);
return criteria.list();

Я хочу достичь этого с помощью CriteriaBuilder. Ниже я попытался, но он возвращает пустой массив. Пожалуйста, объясните, что мне здесь не хватает. Также укажите, как установить лимит на результат.

EntityManager em = this.getEntityManager();
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<TagSynonym> query = criteriaBuilder.createQuery(TagSynonym.class);

Root<TagSynonym> fromTagsSynonyms = query.from(TagSynonym.class);
Predicate likesTags = criteriaBuilder.equal(fromTagsSynonyms.get(TagSynonym_.title), "%"+piece+"%");
query.select(fromTagsSynonyms).where(likesTags);
return em.createQuery(query).getResultList();
Теги:
spring
jpa
expression
criteria

1 ответ

1
Лучший ответ

Вы должны использовать CriteriaBuilder#like() вместо CriteriaBuilder#equal(), чтобы выполнить like сопоставление.

Predicate likesTags = criteriaBuilder.like(fromTagsSynonyms.get(TagSynonym_.title), "%"+piece+"%");

В остальном ваш код в основном правильный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню