0

Hibernate 4 を使用しています。テーブルから結果を取得したい 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());

ページが実行されると、ログから sql が次のように表示されます

select employeede0_.EMPLOYEE_NUMBER as EMPLOYEE1_0_ from EMPLOYEES employeede0_ 
where employeede0_.EMPLOYEE_NUMBER like ?

このため、私は結果を見ることができません。理想的には、次のようなクエリが必要です

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

どうすればこれを達成できますか?

4

2 に答える 2

2

最終的に実行したい

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

したがって、パーセントを含めます。

于 2013-01-14T10:54:54.727 に答える
1

これはあなたのために働くはずです:

criteria.add ( Restrictions.like ("employeeNumber", "123%" ) );
于 2013-01-14T11:02:44.113 に答える