2017-01-20 5 views
3

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

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

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

+1

Чтобы помочь вам получить ответ, пожалуйста, ознакомьтесь http://stackoverflow.com/help/how-to-ask о том, как задать вопрос – CCBlackburn

+0

тот же вопрос: https://stackoverflow.com/questions/ 40720799/устаревшим-createcriteria-метод-в-гибернации-5 – faoxis

ответ

5

Там целый ряд параметров, которые вы можете осуществлять миграцию из устаревших Hibernate Criteria API, это лишь некоторые из них, которые сразу приходят на ум:

  • HQL/JPQL
  • Названный запроса
  • JPA Критерии API

с точки зрения 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(); 

И, наконец, вы можете также рассмотреть вопрос о JPA Criteria API. Это доступно, если вы используете 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(); 
Смежные вопросы