Hql SubQueries

Gostaria de saber como faço esse Sql em Hql ou Criteria se alguém ai puder me ajudar

Sql em anexo:

select
  seriedisciplina.codserie, turma.codturma, matricula.codturma, seriedisciplina.coddisciplina, disciplina.coddisciplina, 
  formaperiodo.codserie, serie.codserie, formaperiodo.codformaperiodo, turma.codformaperiodo, matricula.codaluno, 
  aluno.codaluno, aluno.descraluno, disciplina.descrdisciplina, 
  (select nota from Avaliacao where
  avaliacao.codaluno = aluno.codaluno and
  avaliacao.codcalendario = 4 and
  avaliacao.codescolapref = 1 and
  avaliacao.coddisciplina = disciplina.coddisciplina and
  avaliacao.codformaperiodoitem = 1 and
  avaliacao.codserie = serie.codserie and
  avaliacao.codturma = turma.codturma) as nota

from
  disciplina, matricula, turma, formaperiodo, serie, seriedisciplina, aluno

where
  matricula.codturma = turma.codturma AND matricula.codaluno = aluno.codaluno AND formaperiodo.codserie = serie.codserie AND
  formaperiodo.codformaperiodo = turma.codformaperiodo AND serie.codserie = seriedisciplina.codserie AND
  seriedisciplina.coddisciplina = disciplina.coddisciplina;

As Classes envolvidas seriam as do From do sql nativo acima.
Se alguém puder ajudar ficarei grato.

att

borellametal

Olá borellametal, seja bem vindo.

É melhor você colocar a sua dificuldade. O que vc sabe sobre HQL/SQL/Criteria?
Para te ajudar melhor, coloca pra gente algum código que vc já tenha feito.

Estamos aqui para ajudar, mas se fizermos para vc qual aprendizado vc teria?

Eu uso Hql e Criteria mas algo bem superficial ( básico diria ) sempre tenho dificuldade quando se trata de colocar uma SubQuerie ou fazer algum inner join.
Meu conhecimentos a mais são ( o que trabalho atualmente ) Flex 3, Flash Builder, Java, Postgres. Se puder me dar um caminho para eu ver, algum exemplo eu me viro, se me expressei mal desculpem ai, mas nao era intenção pedir o código pronto “mamão com açucar”.

borellametal

Alguns que fiz:

	@SuppressWarnings("unchecked")
	@Override	
	public List<Pedido> intervaloEmissao(Date dtinicial,Date dtFinal,int codigo){
		Criteria c = getSession().createCriteria(Pedido.class);
		c.createAlias("codcolaborador", "col");
		c.add(Restrictions.between("dtemissao",dtinicial,dtFinal));
		c.add(Restrictions.eq("col.codcolaborador",codigo));
		c.add(Restrictions.eq("codigo", 1));
		c.addOrder(Order.asc("nrpedido"));
			
		return c.list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Pedido> listar() {
		Query query = this.getSession().createQuery("from Pedido " +
				  " where nrpedido between 20430 and 20460 order by nrpedido");
		return query.list();
	}

Abraço

[quote=borellametal]
[code]@SuppressWarnings(“unchecked”)
@Override
public List<Pedido> listar() {
Query query = this.getSession().createQuery(“from Pedido " +
" where nrpedido between 20430 and 20460 order by nrpedido”);
return query.list();
}

[/code]

Abraço[/quote]haha, fica tranqs. Tem ninguém aqui brigando não! =D

Olha só, tenta montar a sua query em cima dessa aí! A passagem de parâmetros vc pode fazer assim. where nrpedido between 20430 and 20460 order by nrpedido // Seria where nrpedido between :valorInicial and :valorFinal order by nrpedido Caso não funcione a query que vc montar, coloca a dúvida aí. Estamos aqui para ajudar! [=

Bom dia Helbert, sua iniciativa e participação aqui no GUJ são ótimas sempre acompanho, até adquiri um livro seu.

Estou com uma dificuldade parecida com a postada, tenho um conhecimento relativamente bom em SQL porém em HQL sou novato

Fiz um SQL que retorna digamos que seja a quantidade em estoque - a quantidade que já comprei

O SQL será apresentado à seguir.

SELECT i.id, i.produto_id, i.lote_id, i.quantidade,

	 i.quantidade - 
		Coalesce ((	select compraItem.quantidade
					  from Compra compra left outer join Compra_item compraItem on (compra.id = compraItem.compra_id)
					 where compra.licitacao_id = l.licitacao_id
					   and compra.fornecedor_id = l.fornecedor_id
					   and compraItem.produto_id = i.produto_id
					   and compraItem.lote_id = i.lote_id
    ) , 0 )
 
  FROM licitacao_itens i left outer join licitacao_lote l on (l.id = i.lote_id)
 where l.licitacao_id = 1

Agora postarei o código HQL

@NamedQuery(name = "produtosPeloLoteLicitacao", query = "select item.id, item.produto, item.valorUnitario, item.valorTotal,  "+
																"       item.quantidade - 										"+
																"			 ( select compraItem.quantidade                         "+ 
																"               from Compra as compra left join CompraItem as compraItem "+
																"              where compra.licitacao.id = licitacao.id                        "+
 																"                and compra.fornecedor.id = lote.fornecedor.id                 "+
 																"				 and compraItem.produto.id = item.produto.id                   "+  											
 																"				 and compraItem.lote.id    = lote.id                           "+
 																"            )  "+  
 																"  from Licitacao as licitacao left join licitacao.lotes as lote "+ 
																"				   			   left join lote.itens as item      "+
																"				   			   left join item.produto as produto "+
																" where licitacao.id = :idLicitacao  "+
																"   and lote.fornecedor.id = :idFornecedor ")

A seguir segue o erro gerado