Есть несколько вариантов перехода с устаревшего Hibernate Criteria API, вот лишь некоторые из них, которые сразу приходят на ум:
- HQL/JPQL
- Именованный запрос
- API критериев JPA
С точки зрения HQL/JPQL вы можете переписать свой запрос в виде строки:
Curso result = session.createQuery( "FROM Curso WHERE codigo = :codigo" )
.setParameter( "codigo", curso.getCodigo() )
.uniqueResult();
Вы также можете использовать @NamedQuery
, который в основном представляет собой аннотацию, которую вы применяете к объекту или пакету, где вы предоставляете запрос HQL, как вы видите выше, указывая заполнитель для параметров вашего запроса почти таким же образом, а затем предоставляя эти параметры во время выполнения. когда вы выполняете запрос, например:
Curso result = session.createNamedQuery( "Curso.findByCodigo" )
.setParameter( "codigo", curso.getCodigo() )
.uniqueResult();
И, наконец, вы также можете рассмотреть API критериев JPA. Это доступно, если вы используете JPA EntityManager
, а не 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();
person
Naros
schedule
21.01.2017