Como faz busca com criterios com Hibenate?

12 respostas
X

Eu já dei um procurada, mais achei nada que realmente mi ajude…
Alguém pode ajudar?
E só sei fazer para buscar tudo de uma categoria, tipo tem aluno e professor ai eu busco todos os alunos ou todos os professores… Mais isso é inútil para oq eu quero…

Obrigado.

12 Respostas

igor_ks

Nao achou nada?

Bom, usei este uma vez: http://docs.jboss.org/hibernate/core/4.0/hem/en-US/html/querycriteria.html

Mas normalmente uso uma apostila de JPA 2 chamada: Apress Pro JPA 2 Mastering the Java trade Persistence API que é MTO boa e mto completa, criteriabuilder é apenas um dos itens

X

igor_ks:
Nao achou nada?

Bom, usei este uma vez: http://docs.jboss.org/hibernate/core/4.0/hem/en-US/html/querycriteria.html

Mas normalmente uso uma apostila de JPA 2 chamada: Apress Pro JPA 2 Mastering the Java trade Persistence API que é MTO boa e mto completa, criteriabuilder é apenas um dos itens

Cara eu não sei inglês mesmo eu traduzindo pelo google fica confuso… :S

Eu achei isso aqui, mais entendi mt bem:
Tem como mi explicar?

Um critério individual de query é uma instancia da interface org.hibernate.criterion.Criterion. A classe
org.hibernate.criterion.Restrictions define os métodos da fábrica para obter certos tipos pré fabricados
de Criterion.

List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, maxWeight) ) .list();
Restrições podem ser logicamente agrupadas.

List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.or( Restrictions.eq( "age", new Integer(0) ), Restrictions.isNull("age") ) ) .list();

List cats = sess.createCriteria(Cat.class) .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) ) .add( Restrictions.disjunction() .add( Restrictions.isNull("age") ) .add( Restrictions.eq("age", new Integer(0) ) ) .add( Restrictions.eq("age", new Integer(1) ) ) .add( Restrictions.eq("age", new Integer(2) ) ) ) ) .list();

igor_ks

acho mais facil vc falar qual consulta vc quer fazer, ai tentamos ajudar a partir disso…
caso saiba SQL, pode ser mandando o SQL que transformamos em criteria

R

Fala,

Bem Criteria vc ja sabe o que é, vou dar um exemplo utilizando SQL e depois o Criteria do hibernate.

Ex SQL:

Ex Criteria Hibernate:

Cliente cliente = session.createCriteria(Cliente.class) .add( Restrictions.eq("codigo", "1") ) .uniqueResult();

Bem no meu vocabulário popular o Criteria é uma maneira de escrevermos Java ao invés de SQL. Desculpe pessoal por usar isso como didática.rsrsrs
Facilitando muito a vida do desenvolvedor. Se quiser mais informações http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html.

Abs.

X

rcnweb:
Fala,

Bem Criteria vc ja sabe o que é, vou dar um exemplo utilizando SQL e depois o Criteria do hibernate.

Ex SQL:

Ex Criteria Hibernate:

Cliente cliente = session.createCriteria(Cliente.class) .add( Restrictions.eq("codigo", "1") ) .uniqueResult();

Bem no meu vocabulário popular o Criteria é uma maneira de escrevermos Java ao invés de SQL. Desculpe pessoal por usar isso como didática.rsrsrs
Facilitando muito a vida do desenvolvedor. Se quiser mais informações http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html.

Abs.

Oq exatamente, isso vai fazer?

Obrigado!

igor_ks

isso cria uma instancia do Criteria

X

igor_ks:
acho mais facil vc falar qual consulta vc quer fazer, ai tentamos ajudar a partir disso…
caso saiba SQL, pode ser mandando o SQL que transformamos em criteria

Creio que ficaria assim:

igor_ks

Tente assim

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Aluno> c = cb.createQuery(Aluno.class);
Root<Aluno> aluno = c.from(Aluno.class);
c.select(aluno).where(cb.equal(aluno.get("nome"), aluno.getNome()));
TypedQuery<Aluno> q = entityManager.createQuery(c);
List<Aluno> alunos = q.getResultList();

bom, escrevi o codigo direto aqui no post, pode ser que tenha algum erro de compilacao

X

igor_ks:
Tente assim

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Aluno> c = cb.createQuery(Aluno.class);
Root<Aluno> aluno = c.from(Aluno.class);
c.select(aluno).where(cb.equal(aluno.get("nome"), aluno.getNome()));
TypedQuery<Aluno> q = entityManager.createQuery(c);
List<Aluno> alunos = q.getResultList();

bom, escrevi o codigo direto aqui no post, pode ser que tenha algum erro de compilacao

Cara,
minha classe Aluno herda da classe Pessoa logo o método .getNome é “original” dessa classe, isso muda alguma coisa?

Pq o eclipse ta reclamando isso:

igor_ks

ueh, se aluno herda de pessoa e nome esta em pessoa, Aluno tem acesso ao getNome()

X

Foi isso que pensei, mais o eclipse fica reclamando onde tem o .getNome():

Ai pensei que tinha haver com o Root:

Sabe pq o eclipse ta reclamando? :S

luxu

o camilo explica muito bem sobre criteria:

http://blog.camilolopes.com.br/

Criado 6 de janeiro de 2012
Ultima resposta 6 de jan. de 2012
Respostas 12
Participantes 4