简体   繁体   English

如何在JPA中从Expression转换为CriteriaBuilder

[英]How to convert from Expression to CriteriaBuilder in JPA

I have below code which uses outdated Expression 我下面的代码使用过时的Expression

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

I want to achieve same with CriteriaBuilder . 我想通过CriteriaBuilder实现相同的目标。 Below is what I tried, however it returns an empty array. 下面是我尝试的方法,但是它返回一个空数组。 Please guide what do I miss here. 请在这里指导我想念的东西。 Also guide how to set limit on result. 还指导如何设置结果限制。

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();

You should use CriteriaBuilder#like() instead of CriteriaBuilder#equal() , to perform like matching. 您应该使用CriteriaBuilder#like()而不是CriteriaBuilder#equal()来执行like匹配。

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

For the rest your code is basically correct. 其余的代码基本上是正确的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM