Java JPA标准生成器和子字符串
我有一个CriteriaBuilder,我试图从中获取从0到10的字符。但是,我无法获得所需的输出Java JPA标准生成器和子字符串,java,jpa,eclipselink,jpa-2.0,criteria-api,Java,Jpa,Eclipselink,Jpa 2.0,Criteria Api,我有一个CriteriaBuilder,我试图从中获取从0到10的字符。但是,我无法获得所需的输出 CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Emp> cq = cb.createQuery(Emp.class); Root<Emp> c = cq.from(Emp.class); cb.substring(c.<String>get("projDes
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Emp> cq = cb.createQuery(Emp.class);
Root<Emp> c = cq.from(Emp.class);
cb.substring(c.<String>get("projDesc"), 0, 10);
cq.orderBy(cb.desc(c.get("salary")));
Query query = em.createQuery(cq);
.....
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Emp.class);
根c=cq.from(Emp.class);
cb.子串(c.get(“projDesc”),0,10;
客户订单(cb.desc(c.get(“工资”));
Query Query=em.createQuery(cq);
.....
原因可能是什么?来自
创建用于子字符串提取的表达式。提取
从指定位置开始的给定长度。第一个位置是1
尝试做cb.substring(c.get(“projDesc”),1,10代码>
我想你忘了选择表达式了
尝试cq.select(cb.substring(c.get(“projDesc”),1,10))
如果您需要返回Emp
,它将返回List
,您可以使用
cb.construct(Emp.class、e.get(“prop1”)、e.get(“prop2”)、cb.substring(c.get(“projDesc”)、1、10)代码>来自
创建用于子字符串提取的表达式。提取
从指定位置开始的给定长度。第一个位置是1
尝试做cb.substring(c.get(“projDesc”),1,10代码>
我想你忘了选择表达式了
尝试cq.select(cb.substring(c.get(“projDesc”),1,10))
如果您需要返回Emp
,它将返回List
,您可以使用
cb.construct(Emp.class、e.get(“prop1”)、e.get(“prop2”)、cb.substring(c.get(“projDesc”)、1、10)代码>我面临这个问题,因为我的要求是在substr中使用一个数字。下面是示例代码
@Override
public List<SampleProfile> findNonSampleProfileBySequence(Long SampleNo) {
List<SampleProfile> profiles = new ArrayList<>();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<SampleProfile> criteriaQuery = criteriaBuilder.createQuery(SampleProfile.class);
Root<SampleProfile> SampleProfileRoot = criteriaQuery.from(SampleProfile.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (SampleUtil.isValidLong(SampleNo)) {
String SampleStr = Long.toString(SampleNo);
if (StringUtils.isNotBlank(SampleStr) && SampleStr.length() > 5) {
String SampleSequence = SampleStr.substring(5);
predicates.add(criteriaBuilder.equal(criteriaBuilder.substring(SampleProfileRoot.get(SampleProfile_.id).as(String.class), 6), SampleSequence));
predicates.add(criteriaBuilder.equal(SampleProfileRoot.get(SampleProfile_.address).get(Address_.department), SampleStr.substring(0,3)));
}
}
if (!CollectionUtils.isEmpty(predicates)) {
criteriaQuery.where(criteriaBuilder.and(Iterables.toArray(predicates, Predicate.class)));
profiles = entityManager.createQuery(criteriaQuery).setMaxResults(AbstractJpaDAO.MAX_ROW_LIMIT).getResultList();
}
return profiles;
}
我面临这个问题,因为我的要求是在substr中使用数字。下面是示例代码
@Override
public List<SampleProfile> findNonSampleProfileBySequence(Long SampleNo) {
List<SampleProfile> profiles = new ArrayList<>();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<SampleProfile> criteriaQuery = criteriaBuilder.createQuery(SampleProfile.class);
Root<SampleProfile> SampleProfileRoot = criteriaQuery.from(SampleProfile.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (SampleUtil.isValidLong(SampleNo)) {
String SampleStr = Long.toString(SampleNo);
if (StringUtils.isNotBlank(SampleStr) && SampleStr.length() > 5) {
String SampleSequence = SampleStr.substring(5);
predicates.add(criteriaBuilder.equal(criteriaBuilder.substring(SampleProfileRoot.get(SampleProfile_.id).as(String.class), 6), SampleSequence));
predicates.add(criteriaBuilder.equal(SampleProfileRoot.get(SampleProfile_.address).get(Address_.department), SampleStr.substring(0,3)));
}
}
if (!CollectionUtils.isEmpty(predicates)) {
criteriaQuery.where(criteriaBuilder.and(Iterables.toArray(predicates, Predicate.class)));
profiles = entityManager.createQuery(criteriaQuery).setMaxResults(AbstractJpaDAO.MAX_ROW_LIMIT).getResultList();
}
return profiles;
}
将位置从0更改为1并不能解决问题。然后我需要澄清,实际输出和预期输出是什么?实际-设法在规定的时间内完成项目,但由于其他障碍,项目延长了一年,并且发生了超出权限的事件。
预期设法
。感谢您的评论。感谢您的帮助。将位置从0更改为1并不能解决问题。然后我需要澄清,实际输出和预期输出是什么?实际-在规定的时间内完成项目,然而,由于其他障碍,项目延长了一年,并且发生了超出管辖范围的事件。
预计设法。感谢您的评论。感谢您的帮助。您不需要将cb.substring指定给某些内容吗?否则,效果将丢失,就像使用String.substring
@geert3是正确的一样,如果使用substring运行SQL查询,则需要调用函数并添加到select语句,与使用CriteriaBuilder
相同projDesc
是Emp.class
属性,但不是子字符串的结果,您需要添加到CriteriaBuilder
的select语句中。您不需要将cb.substring分配给某个对象吗?否则,效果将丢失,就像使用String.substring
@geert3是正确的一样,如果使用substring运行SQL查询,则需要调用函数并添加到select语句,与使用CriteriaBuilder
相同projDesc
是Emp.class
属性,但不是子字符串的结果,需要添加到CriteriaBuilder
的select语句中。