Hibernate sqlQuery

Estou usando vraptor + hibernate porém estou com um problema para utilizar o sqlquery.

String query = " SELECT " + " (sum((cpe.qtdKG / cp.quantidade_total) * cpMP.quantidade) / count(mp.id)) as quantidade, cpMP.materia_prima_id " + " FROM controle_producao_materia_prima cpMP " + " INNER JOIN materia_prima mp on mp.id = cpMP.materia_prima_id " + " INNER JOIN controle_producao cp on cp.id = cpMP.controle_producao_id " + " INNER JOIN controle_producao_empacotamento cpE on cp.id = cpE.controle_producao_id " + " WHERE cpE.produto_id = ? group by cpMP.materia_prima_id"; SQLQuery sqlQuery = getSession().createSQLQuery(query); sqlQuery.setParameter(0, produtoID); sqlQuery.addScalar("quantidade", Hibernate.DOUBLE); sqlQuery.setResultTransformer(Transformers .aliasToBean(PlanejamentoProducaoItem.class));

//minha estrutura.
PlanejamentoProducaoItem
-id
-quantidade
-materiaPrima
–id

em resumo quero fazer essa minha consulta preencher a lista contendo a quantidade e o id DE DENTRO DA materia prima mas n consigo de jeito nenhum.

[quote=jingle]Estou usando vraptor + hibernate porém estou com um problema para utilizar o sqlquery.

String query = " SELECT " + " (sum((cpe.qtdKG / cp.quantidade_total) * cpMP.quantidade) / count(mp.id)) as quantidade, cpMP.materia_prima_id " + " FROM controle_producao_materia_prima cpMP " + " INNER JOIN materia_prima mp on mp.id = cpMP.materia_prima_id " + " INNER JOIN controle_producao cp on cp.id = cpMP.controle_producao_id " + " INNER JOIN controle_producao_empacotamento cpE on cp.id = cpE.controle_producao_id " + " WHERE cpE.produto_id = ? group by cpMP.materia_prima_id"; SQLQuery sqlQuery = getSession().createSQLQuery(query); sqlQuery.setParameter(0, produtoID); sqlQuery.addScalar("quantidade", Hibernate.DOUBLE); sqlQuery.setResultTransformer(Transformers .aliasToBean(PlanejamentoProducaoItem.class));

//minha estrutura.
PlanejamentoProducaoItem
-id
-quantidade
-materiaPrima
–id

em resumo quero fazer essa minha consulta preencher a lista contendo a quantidade e o id DE DENTRO DA materia prima mas n consigo de jeito nenhum.
[/quote]

Boa tarde jingle,

ja tentaste fazer assim?

 " SELECT "
	                        +"(sum(cpe.qtdKG) / sum(cp.quantidade_total) * sum(cpMP.quantidade)) / count(mp.id) as quantidade, cpMP.materia_prima_id"
				+ " FROM  controle_producao_materia_prima cpMP "
				+ "	INNER JOIN materia_prima mp on  mp.id = cpMP.materia_prima_id "
				+ "	INNER JOIN controle_producao cp on cp.id = cpMP.controle_producao_id "
				+ "	INNER JOIN controle_producao_empacotamento cpE on cp.id = cpE.controle_producao_id "
				+ " WHERE  	cpE.produto_id = ?  group by cpMP.materia_prima_id";

obs: tens conciência que a parte fracionaria deste número pode ser gigantesca, confere?

não entendi qual foi a diferença, a parte da query pra mim ta tranquilo ele ta trazendo os resultado que quero, porém não consigo jogar as informações pra dentro do objeto que quero, até a quantidade que é um atributo direto do PlanejamentoProducaoItem eu consigo mas o id que é um atributo da materia prima, eu não consigo.

levando em consideração o nome do post, e o exemplo, concluí que o problema fosse na query.

bom, lança alguma excessão? considere usar Hibernate.BIG_DECIMAL.

se eu deixar do modo que esta a query com campo “materia_prima_id” ele vai tentar pegar o objeto PlanejamentoProducaoItem e tentar dar um setMateria_prima_id mas esse campo não existe dentro do PlanejamentoProducaoItem ele só existe dentro do materia prima que por sua vez ta dentro do PlanejamentoProducaoItem, dai eu não sei como fazer ele setar lá ja tentei milhares de alias ao campo ja tentei usa o addEntity, nada funciona pra mim.

tentou criar um cosntrutor na entidade?

exemplo:

PlanejamentoProducaoItem ( int id, double quantidade){
MateriaPrima mp = new MateriaPrima(id, quantidate);

setMateriaPrima(mp);

}

Tem que adicionar a entidade que você quer retornar por exemplo:

sqlQuery.addEntity(Entidade.class);
List<Entidade> entidade = sqlQuery.list();

Tenta ae :wink: