Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 使用元模型区分大小写条件的JPA2标准API_Java_Hibernate_Jpa_Criteria Api - Fatal编程技术网

Java 使用元模型区分大小写条件的JPA2标准API

Java 使用元模型区分大小写条件的JPA2标准API,java,hibernate,jpa,criteria-api,Java,Hibernate,Jpa,Criteria Api,我使用Hibernate4API获得基于like语句的结果,代码如下 Predicate predicate = cb.like(emp.get(EmployeeDetail_.empName), empName+"%"); 生成的sql语句是 select employeede0_.EMPLOYEE_NAME as EMPLOYEE1_0_ from EMPLOYEES employeede0_ where employeede0_.EMP

我使用Hibernate4API获得基于like语句的结果,代码如下

Predicate predicate = cb.like(emp.get(EmployeeDetail_.empName),
                empName+"%");
生成的sql语句是

 select employeede0_.EMPLOYEE_NAME as EMPLOYEE1_0_ from EMPLOYEES employeede0_ 
        where employeede0_.EMPLOYEE_NAME like 'smith%'
我如何修改我的java代码,使员工的姓名小写?生成的sql输出应该如下所示

select employeede0_.EMPLOYEE_NAME as EMPLOYEE1_0_ from EMPLOYEES employeede0_ 
    where lower(employeede0_.EMPLOYEE_NAME) like lower('smith%')
获取结果的完整代码

   CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Employee> c = cb.createQuery(Employee.class);
        Root<Employee> emp = c.from(Employee.class);
        c.select(emp);
        List<Predicate> criteria = new ArrayList<Predicate>();
        ParameterExpression<String> pexp = cb.parameter(String.class,
                "empName");
        Predicate predicate = cb.like(emp.get(Employee_.empName),
                empName+"%");
        criteria.add(predicate);

        if (criteria.size() == 1) {
            c.where(criteria.get(0));
        } else if (criteria.size() > 1) {
            c.where(cb.and(criteria.toArray(new Predicate[0])));
        }
        TypedQuery<EmployeeDetail> q = entityManager.createQuery(c);
        data.setResult(q.getResultList());
CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery c=cb.createQuery(Employee.class);
根emp=c.from(Employee.class);
c、 选择(emp);
列表条件=新建ArrayList();
ParameterExpression pexp=cb.parameter(String.class,
“名称”);
谓词谓词=cb.like(emp.get(Employee.empName),
empName+“%”;
添加(谓词);
if(criteria.size()==1){
c、 其中(criteria.get(0));
}else if(criteria.size()>1){
c、 其中(cb.和(criteria.toArray(新谓词[0]));
}
TypedQuery q=entityManager.createQuery(c);
setResult(q.getResultList());
使用:


出于某种奇怪的原因,当执行此操作时,不会出现任何结果。生成的sql是
从V_EMPLOYEE Employeed0_u中选择Employeed0_u.EMP_u名称为LONG2_0_u,其中较低的er(Employeed0_0.EMP_u名称)如?
查询似乎正确,但是。。。也许问题出在别的地方?参数
empName
的值是多少?
empName
的值得到的是正确的,例如,值以
'smith'
的形式出现,我们可以看到sql语句而不是问号(?)?我发现了一件很奇怪的事情,
System.out.println(“size”+q.getResultList().size())。这将打印sql结果的实际计数,但在jsf页面中看不到任何记录。确保查询返回正确的结果集。如果是,请提出新问题,并添加相关信息。
Predicate predicate = cb.like(cb.lower(emp.get(EmployeeDetail_.empName)),
            empName.toLowerCase() + "%");