Hibernate 5 — createCriteria устарела

Мне нужна помощь, чтобы перенести код с createCriteria на Hibernate 5, код ниже:

public Curso comDadosIguais(Curso curso) {
    return (Curso) this.session.createCriteria(Curso.class)
            .add(Restrictions.eq("codigo", curso.getCodigo()))
            .uniqueResult();
}

Не могли бы вы помочь мне?


person Cesar Sturion    schedule 20.01.2017    source источник
comment
Чтобы получить ответ, просмотрите stackoverflow.com/help/how-to-ask, чтобы узнать, как задать вопрос   -  person CCBlackburn    schedule 21.01.2017
comment
Тот же вопрос: stackoverflow.com/questions/ 40720799/   -  person faoxis    schedule 31.07.2017


Ответы (1)


Есть несколько вариантов перехода с устаревшего 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