Duvida utilização de criteria

5 respostas
A

Boa tarde amigos,

estou começando a ler sobre consultas utilizando o critéria do hibernate. A minha duvida é a seguinte, imaginem que eu tenho um consulta aberta que traz o produto ,a quantidade comprada e o preço deste produto. Pra nao precisar ir no banco e fazer uma nova consulta,tem como eu utilizar este objeto e aplicar algumas modificações nele, como por exemplo ,somar o total comprado e o valor gasto na compra, utilizando o criteria.

Eu queria,a partir de um objeto ja aberto transformá-lo , para que eu nao preciso acessar o banco novamente para trazer estes dados transformados… isso é possivel, utilizando o criteria??

5 Respostas

drsmachado

Por que não faz isto com o objeto que recebe estes valores, a partir da consulta?

A

é que meu exemplo foi simples… esse programa é um controle orçamentario. Na teoria eu tenho uma consulta simples… o que foi gasto contra o que foi orçado, acontece que são tantas subconsultas que solicitaram a partir desta ideia basica que o sistema ficou lento, pois a cada clique que o usuario dá, eu acesso o banco e retorno os mesmos valores de uma forma diferente, e coloco numa tabela… o que eu queria é deixar esta consulta basica em cache e ,a partir dai fazer as transformações solicitadas, uma vez que os dados sao estaticos , nao tenho a necessidade de toda hora acessar o banco para pegar praticamente a mesma informação…entao pensei se haveria um jeito de fazer estas transformações em um objeto ja aberto, utilizando o criteria…

A

bom, traduzindo pra portugues claro… eu tenho uma consulta em sql nativo que eu precisaria faze-la utilizando o criteria.A minha pergunta é ;…isso é possível??se for, como eu faço ,por exemplo um Case em um campo utilizando o criteria?? alguem tem algum tutorial de criteira ??. Segue a consulta abaixo.

strsql = “SELECT a.DT,”
+ “a.COD_CONTA,”
+ “a.FORNECEDOR CNPJ_FORNEC,”
+ “a.ORCADO,”
+ “a.GASTO,”
+ “a.CT_CUSTO,”
+ “a.EMPRESA,”
+ “TBRJ_CAD_CT_CUSTO.NM_CT_CUSTO,”
+ “TBRJ_CAD_CT_CUSTO.EMPRESA,”
+ “TBRJ_CAD_CT_CUSTO.FILIAL,”
+ “TBRJ_CAD_CONTAS.CONTA,”
+ "IFNULL(TBRJ_CAD_FORNECEDOR.FORNECEDOR,TBRJ_CAD_FORNECEDOR.CNPJ_FORNEC) FORNECEDOR "
+ “FROM (SELECT DT,”
+ “COD_CONTA,”
+ “FORNECEDOR,”
+ “VALOR ORCADO,0 GASTO,”
+ “CT_CUSTO,”
+ "EMPRESA "
+ "FROM TBRJ_ORC_PROJETADO "
+ “UNION ALL SELECT DT,”
+ “COD_CONTA,”
+ “CNPJ_FORNEC,”
+ “0,(CASE WHEN TP_LANC =‘C’ THEN VALOR ELSE -VALOR END) GASTO,”
+ “CENTRO_CUSTO,”
+ "COD_EMPRESA "
+ "FROM TBRJ_DESPESAS ) a "
+ "INNER JOIN TBRJ_CAD_CONTAS ON a.COD_CONTA = TBRJ_CAD_CONTAS.COD_CONTA "
+ "LEFT JOIN TBRJ_CAD_CT_CUSTO ON a.CT_CUSTO = TBRJ_CAD_CT_CUSTO.CT_CUSTO "
+ "LEFT JOIN TBRJ_CAD_FORNECEDOR ON a.FORNECEDOR = TBRJ_CAD_FORNECEDOR.CNPJ_FORNEC "
+ "WHERE a.CT_CUSTO LIKE ‘8%’ AND EXTRACT(YEAR_MONTH FROM DT)=:mes "
+ "ORDER BY DT DESC ";

ViniGodoy

Movido para o fórum de persistencia.

Note que a descrição do fórum diz:
Hibernate, JPA, EJB, Eclipselink, Toplink, JDBC, IBatis e outros frameworks relacionados a persistência e banco de dados, assim como discussões específicas sobre MySQL, PostgreSQL, Oracle e SQL em geral.

Procure ler atentamente a descrição dos fóruns antes de postar, o fórum de java básico não é local para todas as suas dúvidas. Assim você tem mais chances de ser respondido, e mais rapidamente.

drsmachado

Então, meu camarada. É mais fácil trabalhar com estes dados em objetos “pendurados” na memória ou sessão.
Cria um ArrayList dos objetos com os quais você trabalha (ou um para cada consulta) e quebra tudo na lógica.
Digo isto por dois motivos, o primeiro, acessar a memória é muito mais rápido que acessar o banco e, fica mais fácil manter caso haja, por algum motivo de Deus, a troca de banco de dados, não haverá uma necessidade de refazer tudo (se bem que com criteria não teria também).

Mas, aguarda mais um tempo aí, quem sabe alguém te apresente um tutorial de Criteria.

Criado 23 de maio de 2011
Ultima resposta 24 de mai. de 2011
Respostas 5
Participantes 3