Consulta em hibernate

5 respostas
V

Pessoal como é que eu faço para obter o retorno de uma lista de objetos que possuam uma determinada subString dentro de uma String usando hibernate.

por exemplo no banco de dados eu tenho 10 registros onde o primeiro nome é Maurilio.

Maurilio Fernando
Maurilio Carlos
... e etc

eu quero q ele retorne todos que contenham esse nome maurilio no campo nome. Tentei fazer algo assim mas não tive sucesso.

public Collection<Coordenador> listaCoordenadores(String criterio){
		
		
		
		session=CreateSessionFactory.openSession();
		
		List c= session.createCriteria(Coordenador.class).add(Restrictions.eq("nome",criterio.contains(criterio))).list();
		
		return c;
		
	}

5 Respostas

jamirdeajr

Creio que assim:

List c= session.createCriteria(Coordenador.class).add(Restrictions.like("nome",criterio,MatchMode.ANYWHERE)).list();
Kanin_Dragon

Jovem,
Use o crit.add(Restrictions.like(“name”,“Mauricio%”)) creio que com isso resolve o seu problema.

abs,

V

Sem sucesso cara fiz dessa forma

como o método assim e nada agradeço a ajuda de todos. O que mais posso testar??

Lembrando que o paramentro recebido pelo método é qualquer subString que pode estar contida no campo nome.

public Collection<Coordenador> listaCoordenadores(String criterio){
		
		
		
		session=CreateSessionFactory.openSession();
		
		List c= session.createCriteria(Coordenador.class).add(Restrictions.like("nome","criterio%")).list();
		
		return c;
		
	}
luxu

use o q o kanin postou e dps pesquise sobre, vai ver qta coisa dah pra fazer com essa API.

jamirdeajr

Do jeito que passei é o equivalente a fazer like ‘%’+criterio+’%’, ou seja, a palavra procurada pode estar em qualquer posição. Teria que ter funcionado.

List c= session.createCriteria(Coordenador.class).add(Restrictions.like("nome",criterio,MatchMode.ANYWHERE)).list();

Caso queira somente as que iniciam com a palavra (Ex. LIKE ‘Mauricio%’) então troque o MatchMode para MatchMode.START, que é o jeito sugerido pelo Kanin.
Se preferir usar o ‘%’ diretamente como o Kanin sugeriu e não MatchMode você terá que colocar obviamente sua variável e não a palavra criterio do jeito que você fez, o certo seria assim:

List c= session.createCriteria(Coordenador.class).add(Restrictions.like("nome",criterio+"%")).list();

Sugiro que você configure o Hibernate a mostrar os SQL gerados, assim poderá ver o que está acontecendo, o que pode ser feito assim:

<property name="hibernate.show_sql" value="true"></property>
Criado 29 de abril de 2011
Ultima resposta 30 de abr. de 2011
Respostas 5
Participantes 4