2017-01-20 5 views
3

사용되지 않는 코드이 아래와 같습니다 : 당신이 날최대 절전 모드 5 - createCriteria 내가 <code>Hibernate 5</code>에 대한 <code>createCriteria</code>와 코드를 마이그레이션하기 위해 도움을 필요로

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

도울 수 있을까요?

+1

질문 – CCBlackburn

+0

같은 질문을하는 방법에 대한 http://stackoverflow.com/help/how-to-ask을 검토하십시오, 당신이 대답을 돕기 위해서 40720799/deprecated-createcriteria-method-in-hibernate-5 – faoxis

답변

5

이 즉시 생각 나는 그 몇이되지 않는 최대 절전 모드 기준 API에서 마이그레이션 행사할 수 옵션을 있습니다됩니다

  • HQL/JPQL
  • 명명 된 쿼리는
  • 하십시오 HQL/JPQL의 관점에서 JPA 기준 API

, 당신은 문자열로 쿼리를 다시 작성할 수

Curso result = session.createQuery("FROM Curso WHERE codigo = :codigo") 
    .setParameter("codigo", curso.getCodigo()) 
    .uniqueResult(); 

기본적으로 위와 마찬가지로 HQL 쿼리를 제공하는 엔티티 또는 패키지에 적용되는 주석이며 쿼리 매개 변수의 자리 표시자를 같은 방식으로 지정하면 이 같은 쿼리를 실행할 때 이러한 매개 변수는 런타임이있다 공급 :

Curso result = session.createNamedQuery("Curso.findByCodigo") 
    .setParameter("codigo", curso.getCodigo()) 
    .uniqueResult(); 

그리고 마지막으로, 당신은 또한 JPA 기준 API를 고려할 수 있습니다. 이것은 최대 절전 모드 Session 대신 JPA EntityManager을 사용하는 경우에 사용할 수 있습니다. https://stackoverflow.com/questions/ :

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();