如何在 JPA 中从表达式转换为 CriteriaBuilder
How to convert from Expression to CriteriaBuilder in JPA
我有以下使用过时代码的代码 Expression
Criteria criteria = getSession().createCriteria(TagSynonym.class);
criteria.add(Expression.like("title", "%"+piece+"%") );
criteria.setFirstResult(0);
criteria.setMaxResults(maxTagsInResult);
return criteria.list();
我想用 CriteriaBuilder
达到同样的效果。下面是我尝试过的,但是它 returns 是一个空数组。请指导我在这里想念什么。还指导如何设置结果限制。
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();
您应该使用 CriteriaBuilder#like()
而不是 CriteriaBuilder#equal()
,来执行 like
匹配。
Predicate likesTags = criteriaBuilder.like(fromTagsSynonyms.get(TagSynonym_.title), "%"+piece+"%");
其余的你的代码基本上是正确的。
我有以下使用过时代码的代码 Expression
Criteria criteria = getSession().createCriteria(TagSynonym.class);
criteria.add(Expression.like("title", "%"+piece+"%") );
criteria.setFirstResult(0);
criteria.setMaxResults(maxTagsInResult);
return criteria.list();
我想用 CriteriaBuilder
达到同样的效果。下面是我尝试过的,但是它 returns 是一个空数组。请指导我在这里想念什么。还指导如何设置结果限制。
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();
您应该使用 CriteriaBuilder#like()
而不是 CriteriaBuilder#equal()
,来执行 like
匹配。
Predicate likesTags = criteriaBuilder.like(fromTagsSynonyms.get(TagSynonym_.title), "%"+piece+"%");
其余的你的代码基本上是正确的。