Java 基于like';123%';使用hibernate

Java 基于like';123%';使用hibernate,java,hibernate,jpa,Java,Hibernate,Jpa,我使用的是Hibernate4,在我的DAO类中有以下代码 从我的表中获取结果 CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Employee> c = cb.createQuery(Employee.class); Root<Employee> emp = c.from(Employee.class); c.select(emp

我使用的是Hibernate4,在我的DAO类中有以下代码 从我的表中获取结果

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,
                "employeeNumber");
Predicate predicate = cb.like(emp.get(Employee_.employeeNumber),
                pexp);

        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<Employee> q = entityManager.createQuery(c);
if (employeeNumber != null) {
            q.setParameter("employeeNumber", employeeNumber);
data.setResult(q.getResultList());
因此,我无法看到任何结果。理想情况下,我希望有这样一个查询

select employeede0_.EMPLOYEE_NUMBER as EMPLOYEE1_0_ from EMPLOYEES employeede0_ 
    where employeede0_.EMPLOYEE_NUMBER like '123%'

我怎样才能做到这一点呢?

您希望最终执行吗

Predicate predicate = cb.like("employeeNumber", "123%");

因此,包括百分比。

您希望最终执行

Predicate predicate = cb.like("employeeNumber", "123%");

因此,包括百分比。

这应该适合您:

criteria.add ( Restrictions.like ("employeeNumber", "123%" ) );

这应该适合您:

criteria.add ( Restrictions.like ("employeeNumber", "123%" ) );

? 表示hibernate将在运行时获取此值。您在日志中看不到该值。您必须确保正确设置了属性。@Renjith so
like?
表示它作为
EMPLOYEE\u NUMBER执行,如“123%”此外,我如何正确设置它?@KevinBowersox是的,
公共静态属性employeeNumber示例:[.add(限制,如(“name”,“Fritz%”)]?表示hibernate将在运行时获取此值。您在日志中看不到该值。您必须确保正确设置了属性。@Renjith so
like?
表示它作为
EMPLOYEE\u NUMBER执行,如“123%”此外,我如何正确设置它?@KevinBowersox是的,
公共静态属性employeeNumber示例:[.add(Restrictions.like(“name”,“Fritz%”))感谢您的帮助。我已经像这样管理了
谓词谓词=cb.like(emp.get(Employee.empName),empName+“%”
如果我想要区分大小写的语句,我怎么能用lower()来排序呢?我不完全清楚你的意思,
ilike()
like()
的不区分大小写版本,所以我希望它是区分大小写的。不过,我还没有试过。在文档中,我看到SimpleExpression有一个ignoreCase()方法,因此您可以尝试
Predicate Predicate=cb.like(“employeeNumber”,“123%”).ignoreCase()
谓词谓词=cb.like(emp.get(Employee_u.empName),empName+“%”没有
ignoreCase()方法。但它也是一个简单的表达式。所以将谓词更改为that.Flup我已经设法使用元模型使其工作<代码>谓词谓词=cb.like(cb.lower(emp.get(Employee.empName)),empName.toLowerCase()+“%”礼貌非常感谢您的帮助。谢谢您的帮助。我已经像这样管理了
谓词谓词=cb.like(emp.get(Employee.empName),empName+“%”
如果我想要区分大小写的语句,我怎么能用lower()来排序呢?我不完全清楚你的意思,
ilike()
like()
的不区分大小写版本,所以我希望它是区分大小写的。不过,我还没有试过。在文档中,我看到SimpleExpression有一个ignoreCase()方法,因此您可以尝试
Predicate Predicate=cb.like(“employeeNumber”,“123%”).ignoreCase()
谓词谓词=cb.like(emp.get(Employee_u.empName),empName+“%”没有
ignoreCase()方法。但它也是一个简单的表达式。所以将谓词更改为that.Flup我已经设法使用元模型使其工作<代码>谓词谓词=cb.like(cb.lower(emp.get(Employee.empName)),empName.toLowerCase()+“%”礼貌非常感谢您的帮助。