首页 > 解决方案 > 在休眠条件中使用限制时出错

问题描述

我是 hibernate 的新手,正在学习 HCQL(Hibernate Criteria Query language),并尝试在代码下方运行但收到警告-'不推荐使用 SharedSessionContract 类型的方法 createCriteria(Class)'

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

所以我在谷歌上搜索并尝试了下面的代码,但现在在 myCriteria.add(nameCriteria) 方法中出现错误 - 'The method add(Criterion) is undefined for the type 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);

谁能帮我这个?谢谢你

标签: hibernatehibernate-criteria

解决方案


正如我所看到的,您正在尝试将这两个 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();

请参阅参考文档


推荐阅读