ObjectQuery e Builder.... Não sei c é bem ObjectQuery, gostaria de ajuda

2 respostas
Lavieri

Opa pessoal.... to montando um objeto com padrão builder, pra funcionar como Query, pra montar facil consultas e num ficar criando SQL atoa...

Gostaria de opinião de vcs, não sei c to reiventando a roda auhahuahu ... ^^

É bem facil de criar um objeto desse pra funcionar como criador de consultas pra uma entidade.... segue o exemplo
import modelo.persistencia.queryobject.*;
//Pais = a uma entity .... e o segundo argumento é sempre o proprio objeto que estou criando.
public class PaisWhere extends Where<Pais, PaisWhere> {
	
	public PaisWhere() {
		//tem que definir o construtor assim, para que o objeto abstrato saiba qual é a entidade.
		super(Pais.class);
	}
	//Pais tem o campos "nome" que é uma string
	public QueryStringArgument<Pais, PaisWhere> _nome() {
		return createStringColumn("nome");
	}
	//Pais tem o campos "id" que é um Numero
	public QueryNumericArgument<Pais, PaisWhere> _id() {
		return createNumberColumn("id");
	}
}

1° lugar, não estranhem o nome do método iniciando por "_" é apenas uma forma de filtrar os métodos

depois disso criar um SQL é muito simples
Builder query = new 
PaisWhere()		//neste parte as unicas opções são os métodos _nome() e _id()
._nome()		//agora as únicas opções são _like(String), _startLike(String), _equals(String), entre outros....
._startLike("B") //agora as unicas opções são _or(), _and() e _build() 
._or()			//aqui volta para o incio, as opções são _nome() e _id()
._id()			//aqui as opções são _equals(Number), _greater(Number), _equalsOrGreater(Number), entre outros...
._greater(10)	//aqui as opções voltam a ser _or(), and() e _build()
._build();		//aqui o objeto é construido

System.out.println(query.toString());
Ps.: não sei pq, o "code" aki do guj inguliu os "_" antes do nome dos métodos A saida do console é
from Pais t1 where t1.nome like 'B%' or t1.id > 10

Gostaria de saber se tem muita coisa do genero por ai, e se tiver onde tem documentação disso preu dar uma olhada... vlw ^^

a forma de usar é bem fácil, com qualquer ferramente como eclipse, basta digitar os
._
após cada método, que o eclipse filtra e mostra só as opções possiveis, os outros métodos são todos ineretes a Object

2 Respostas

L

Então, no JPA 2.0, que vai sair no meio desse ano, haverá uma API de Criteria que usa um esquema de DSL para fazer pesquisas. As Criterias já existiam no Hibernate, mas a do JPA me parece ser mais conciso e limpo.

Para o Hibernate, existe a documentação em http://hibernate.org/hib_docs/v3/reference/en/html/querycriteria.html .

O seu exemplo é interessante, mas só existe a operação de seleção de registros (cláusura WHERE), faltaria a projeção dos registros (cláusula SELECT) onde se definiria quais as colunas que me interessam.

Lavieri

é leonardo ^^ … a necessidade faz o homen… o meu busca todos os campos pq não tive ainda necessidade de filtralos, eu tinha visto o do hibernate… é muito completo, porem pouco intuitivo,

depois de criado o meu objeto where, praticamente não tem erro ao fazer o SQL, pois a opção “_build()” liberando o objeto de consulta, só aparece nas horas certas… e o depois é so enviar pro repositorio

Builder<Pais> query = PaisWhere()._name()._equals("Brasil")._build(); Pais brasil = Repositories.get(query);

mais vou estudar a API do hibernate (afinal tenho 1 repositorio que o implementa tb ^^

Criado 2 de janeiro de 2009
Ultima resposta 3 de jan. de 2009
Respostas 2
Participantes 2