【问题标题】:Getting error when using Restriction in hibernate-criteria在休眠条件中使用限制时出错
【发布时间】:2020-07-14 15:29:05
【问题描述】:

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

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

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

谁能帮我解决这个问题? 谢谢你

【问题讨论】:

    标签: hibernate hibernate-criteria


    【解决方案1】:

    正如我所见,您正在尝试将这两种 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();
    

    See reference docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2011-07-14
      相关资源
      最近更新 更多