Ola amigos do GUJ,
Pessoal estou com um problema no o uso do criteria eu consigo retorna os nomes q comecao com B "B%" mais depois na hora de exibir no meio do loop o hibernate é ativado novamente e retorna todos os telefones sem a restricao do prefixo "(11)%" ... creio q ele esta perdendo a consulta anterior e realizando uma nova só com na tabela telefone e sem restricao.
Obs: Ao perceber eu marquei o trecho ao acontece essa nova chamada do hibernate usando essas linhas:
System.out.println("\n---------------------------------------------");
System.out.println(u.getCNome() + " *Dentro do Objeto Nº: " + i++);
Segue os Codigos:
Trecho do hashset da classe TbUsuario:private Set tbTelefones = new HashSet(0);
public Set getTbTelefones() {
return this.tbTelefones;
}
public void setTbTelefones(Set tbTelefones) {
this.tbTelefones = tbTelefones;
}
List results =
session.createCriteria(TbUsuario.class)
.createAlias("tbTelefones", "tel")
.add(Expression.like("this.CNome", "B%"))
.add(Expression.like("tel.CTelefone", "(11)%"))
.list();
List<TbUsuario> lista_usuario = results;
//cria o objeto telefone
TbTelefone telefone;
Integer i = 0;
//percorre a lista
for (TbUsuario u : lista_usuario) {
System.out.println("\n---------------------------------------------");
System.out.println(u.getCNome() + " *Dentro do Objeto Nº: " + i++);
//* ESSA LINHA GERA MAIS UMA CONSULTA DO HIBERNATE E RETORNA TODOS OS TELEFONES
Iterator It = u.getTbTelefones().iterator();
int n = 0;
while (It.hasNext()) {
telefone = (TbTelefone) It.next();
System.out.println(telefone.getCTelefone());
}
<set inverse="true" name="tbTelefones">
<key>
<column name="c_id_usuario"/>
</key>
<one-to-many class="Modelo.TbTelefone"/>
</set>
<many-to-one class="Modelo.TbUsuario" fetch="select" name="tbUsuario">
<column name="c_id_usuario"/>
</many-to-one>
---------------------------------------------
Bruno *Dentro do Loop Objeto Nº: 0
Hibernate:
select
tbtelefone0_.c_id_usuario as c2_1_,
tbtelefone0_.c_id as c1_1_,
tbtelefone0_.c_id as c1_0_0_,
tbtelefone0_.c_id_usuario as c2_0_0_,
tbtelefone0_.c_telefone as c3_0_0_
from
public.tb_telefone tbtelefone0_
where
tbtelefone0_.c_id_usuario=?
([telefone removido]
([telefone removido]
([telefone removido]
Obrigado pela atenção. 8)