Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA标准生成器和子字符串_Java_Jpa_Eclipselink_Jpa 2.0_Criteria Api - Fatal编程技术网

Java JPA标准生成器和子字符串

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,我试图从中获取从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("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语句中。