如何在JPA中将Expression转换为CriteriaBuilder

时间:2015-03-10 00:23:00

标签: java spring jpa expression criteria

我在下面的代码中使用了过时的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();

1 个答案:

答案 0 :(得分:1)

您应该使用CriteriaBuilder#like()代替CriteriaBuilder#equal()来执行like匹配。

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

其余的代码基本上都是正确的。