您可以使用许多选项从已弃用的 Hibernate Criteria API 迁移,这些只是立即浮现在脑海中的几个:
- HQL / JPQL
- 命名查询
- JPA 标准 API
从 HQL / JPQL 的角度来看,您可以将查询重写为字符串:
Curso result = session.createQuery( "FROM Curso WHERE codigo = :codigo" )
.setParameter( "codigo", curso.getCodigo() )
.uniqueResult();
您还可以使用 a @NamedQuery
,它基本上是您应用于提供 HQL 查询的实体或包的注释,就像您在上面看到的一样,以相同的方式为查询参数指定占位符,然后在运行时提供这些参数您执行查询,例如:
Curso result = session.createNamedQuery( "Curso.findByCodigo" )
.setParameter( "codigo", curso.getCodigo() )
.uniqueResult();
最后,您还可以考虑 JPA Criteria API。如果您使用的是 JPAEntityManager
而不是 Hibernate ,则此功能可用Session
。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Curso> query = cb.createQuery( Curso.class );
Root<Curso> root = query.from( Curso.class );
query.select( root )
.where( cb.eq( root.get( "codigo" ), curso.getCodigo() ) );
Curso result = entityManager.createQuery( query ).getSingleResult();