当前位置: 首页 > 知识库问答 >
问题:

在Hibernate条件中使用限制时出错

步兴德
2023-03-14

我不熟悉hibernate,了解了HCQL(hibernate Criteria查询语言),并尝试运行下面的代码,但收到警告——“来自类型SharedSessionContract的方法createCriteria(Class)已被弃用”

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

所以我在谷歌上搜索并尝试了下面的代码,但现在在myCriteria.add(nameCriteria)方法中出现错误-'方法add(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个答案

宦宏爽
2023-03-14

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

参见参考文件

 类似资料:
  • 问题内容: 使用hibernate条件时,仅更改联接类型会影响根域类的子级集合的结果。 例如,让Parent类与Child类具有一对多关系,并具有以下数据: 使用以下hibernate条件返回1父行,访问子集合结果将返回两行: 但是,当通过左连接更改上述代码时,将返回1父行,但是在访问子集合时仅返回匹配的子行。 为什么会出现这种副作用?我发现了一些关于使用或避免这种副作用的讨论,具体取决于您的预期

  • 问题内容: 如何使用hibernate限制来实现此目的? 问题答案: 认为有效

  • 问题内容: 您好,我在示例中使用了hibernate模式。对于bean Table Audit Trial,我想获取包含上限和下限的日期范围之间的审计试用。我的代码如下 我的开始日期是。且结束日期为。但是它只会将结果赋予。不执行包含性搜索。我正在使用SQL Server。 问题答案: 我认为您的auditDate实际上是一个时间戳。如果是这样的话,那是正常的,因为25/05/2011表示25/05

  • 问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 我的Hibernate bean ContentElementTypeProperty引用了另一个Hibernate bean TestUnitType(多对一)。 TestUnitType是ContentElementTypeProperty的字段。 在数据库中,testunittypeid是表ContentElementTypeProperty中的一列。 我正在寻求从contentelemen

  • 我创建了一个对象,它映射了数据库中的两个表:字典表和令牌表。表示这两个表之间连接的对象(类)称为DictionaryToken。 下面是课程: 公共类DictionaryToken{private static Logger LOG=Logger.getLogger(DictionaryToken.class); 这是我的问题。除非我添加了一个条件,否则我可以使用带有这个对象的服务执行查询。下面是