Java 基于like';123%';使用hibernate
我使用的是Hibernate4,在我的DAO类中有以下代码 从我的表中获取结果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
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 solike?
表示它作为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()+“%”代码>礼貌非常感谢您的帮助。