Problemas com consulta genérica utilizando Example do Hibernate

5 respostas
C

Pessoal, estou com o seguinte problema, tenho uma tela de cadastro de pessoas que contém os dados dessa pessoa e os dados de endereço do mesmo.
Os dados pessoais fazem parte da entidade People e os dados de endereço fazem parte da entidade Address, dentro de People tenho um relacionamento de Um pra Um com endereço.
O código abaixo, realiza uma consulta genérica, ou seja, na tela de cadastro quando eu coloco qualquer informação nos campos referente a dados pessoais, é feita uma consulta com base nesses dados/critérios que passei. Até aqui tudo bem !

List<People> peoples = new ArrayList<People>();
Example ex = Example.create(people);
ex.excludeZeroes();
ex.enableLike(MatchMode.ANYWHERE);
ex.ignoreCase();

peoples = HibernateUtil.getSession().createCriteria(People.class).add(ex).list();

Grande problema:
Como eu disse na mesma tela eu tenho informações de endereço da pessoa, quando coloco qualquer informação nos campos de endereço, o filtro não “respeita” os critérios preenchidos, e realiza um “select * from people”.
Não consigo entender o porque meus critérios da parte de endereço são ignorados.
Alguém sabe o que pode ser ??

5 Respostas

drsmachado

Pode ser tudo.
Este método é o único que você usa para listar?

C

Esse é o único método que uso para listar.

drsmachado

Veja que você cria a criteria a partir da classe People, Assim, ele sempre irá procurar por pessoa.
Para procurar endereco, precisa criar a criteria a partir da classe address.

C

Mas e o relacionamento Address dentro de People ?
É possível o Example ignorar essa relação ? ignorar uma FK ?

joao_paulo_1000

Estou começando no Hibernate, então tô meio cru ainda. Também não vi o exemplo do Hibernate.

Mas quando eu preciso fazer um tipo de busca, como endereço por exemplo, faço mais ou menos assim:

Criteria criteria = HibernateUtil.getSession().createCriteria(People.class, "people");
  criteria.createAlias("people.address", "address");
  criteria.add(Restrictions.eq("address.name", "rua tal");
  return criteria.list();

Pra mim dá certo assim.

Att,
João Paulo

Criado 15 de junho de 2012
Ultima resposta 15 de jun. de 2012
Respostas 5
Participantes 3