Получение ошибки при использовании Ограничения в hibernate-критериях - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в hibernate и узнал о HCQL (языке запросов Hibernate Criteria) и попытался запустить приведенный ниже код, но получил предупреждение: «Метод createCriteria (Class) из типа SharedSessionContract устарел»

Criteria myCriteria = session.createCriteria(Employee.class);
        Criterion nameCriteria = Restrictions.eq("name", "Amit");        
        myCriteria.add(nameCriteria);

Поэтому я искал в Google и попробовал приведенный ниже код, но теперь получаю ошибку в методе myCriteria.add (nameCriteria): «Метод add (Criterion) не определен для типа CriteriaQuery»

CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
        Root<Employee> employeeRoot=criteria.from(Employee.class);
        criteria.select(employeeRoot);
        Criterion nameCriteria = Restrictions.eq("name", "Amit");        
        criteria.add(nameCriteria);

Может кто-нибудь помочь мне с этим? Спасибо

1 Ответ

0 голосов
/ 02 апреля 2020

Как я вижу, вы пытаетесь объединить оба API. Restrictions.eq() является проприетарным Hibernate API, и вы не можете использовать его с CriteriaQuery. Если вы хотите использовать JPA Criteria API, вы можете переписать этот запрос примерно так:

        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
        Root<Employee> employeeRoot = criteria.from(Employee.class);
        criteria.select(employeeRoot)
                .where(
                        builder.equal(
                                      employeeRoot.get("name"),
                                      "Amit")
                 );
        TypedQuery<Employee> query = em.createQuery(criteria);
        Employee emp = query.getSingleResult();

См. Справочные документы

...