Criteria usando Examples no Hibernate

9 respostas
nicholas.bittencourt

Pessoal,

Estou fazendo uma consulta usando Examples no Hibernate mas o SQL gerado por ele não bate com o esperado. Um exemplo é que habilitei o Example para trabalhar com like para Strings e a Query resultante sai mais ou menos assim:

Até aí tudo bem… Só que a passagem para o PreparedStatement é feito com ‘data’ quando o certo seria ‘%data%’ para o like funcionar.

Alguém sabe me dizer o porque do erro acontecer?? Não achei referencia nenhuma na documentação do hibernate.

9 Respostas

rodrigo_gomes

Olá,

Quando for usar o enableLike use assim, por exemplo:

Example example = Example.create(seuObjeto) .enableLike(MatchMode.ANYWHERE);

[]´s

nicholas.bittencourt

Cara, até funcionou pro campo que tava dando problema. Mas existem outros campos na consulta que parecem estar sendo ignorados. Existe alguma outra configuração? O código que uso pra montar a Criteria segue abaixo:

protected Criteria buildCriteria(Object o) {
		Criteria criteria = session.createCriteria(o.getClass());
		
		Example example = Example.create(o);
		example = example.enableLike(MatchMode.ANYWHERE);
		example = example.ignoreCase();
		
		System.err.println(example.toString());
		
		criteria.add(example);
		
		return criteria;
	}
bonfarj

Aproveitando o tópico, alguém sabe como posso fazer para fazer buscas por protótipo usando o Hibernate que incluam as classes mapeadas? Eu tentei fazer isso, mas vi no código do Hibernate com o Example ele verifica se o Type do objeto é um AssociationType, ou seja, uma classe mapeada e caso seja o exclui.

Exemplo: A classe Aluno tem uma turma. Eu preencho o atributo turma de aluno e mando fazer uma busca por aquele aluno. Ele não usará o atributo turma na consulta.

abraços!

bonfarj

Alguém sabe de algo sobre isso? :stuck_out_tongue:

juniorsatanas

bonfarj me add no msn : [email removido] quanto tempo cara ! como ta as cosias ?

marcelo.bellissimo
nicholas.bittencourt:
Cara, até funcionou pro campo que tava dando problema. Mas existem outros campos na consulta que parecem estar sendo ignorados. Existe alguma outra configuração? O código que uso pra montar a Criteria segue abaixo:
protected Criteria buildCriteria(Object o) {
		Criteria criteria = session.createCriteria(o.getClass());
		
		Example example = Example.create(o);
		example = example.enableLike(MatchMode.ANYWHERE);
		example = example.ignoreCase();
		
		System.err.println(example.toString());
		
		criteria.add(example);
		
		return criteria;
	}

Quais campos estão sendo ignorados? Se você ler a documentação, está descrito que ele ignora alguns campos mesmo, como por exemplo, os relacionamentos (FK's) ... se voce tiver algum atributo nessa sua classe que esteja mapeado como um relacionamento com outra classe, não irá funcionar mesmo... seria esse o caso ?

marcelo.bellissimo

bonfarj:
Aproveitando o tópico, alguém sabe como posso fazer para fazer buscas por protótipo usando o Hibernate que incluam as classes mapeadas? Eu tentei fazer isso, mas vi no código do Hibernate com o Example ele verifica se o Type do objeto é um AssociationType, ou seja, uma classe mapeada e caso seja o exclui.

Exemplo: A classe Aluno tem uma turma. Eu preencho o atributo turma de aluno e mando fazer uma busca por aquele aluno. Ele não usará o atributo turma na consulta.

abraços!

Não dá… voce tem que adicionar a criteria manualmente nesse caso…

L

Que eu saiba não dá.

Aqui na empresa fiz um método que por reflection adiciona todas as entidades filhas ao exemplo de forma aninhada, mas infelizmente não posso repassar :(.

Basicamente, o que eu fiz, foi ir criando exemplos para cada método filho (getter) e adicionando a criteria principal.

Priuli

http://www.guj.com.br/posts/list/221618.java

Topico meio antigo, mais pode ser util…

Criado 7 de fevereiro de 2007
Ultima resposta 26 de out. de 2010
Respostas 9
Participantes 7