Consulta no Hibernate (HQL ou Criteria) envolvendo herança

Imaginem que uma classe Pedido possui um atributo List itensPedido. A classe ItemPedido é abstrata, temos duas especializações, as classes ItemPedidoProducao e ItemPedidoFaturamento.

Eu queria criar uma consulta que retorna todos os pedidos onde itensPedido possui ao menos um ItemPedidoFaturamento. Como é possível fazer isso? Usei discriminator para o mapeamento, provisoriamente um amigo fez uma query com SQL para contornar o problema, mas queria fazer com HQL ou Criteria.

abraços!

Alguém sabe de algo? :slight_smile:

Não sei se é exatamente a resposta da sua situação, mas caso voce queira fazer um mapeamento usando herança cujo a classe “filho” seja mapeada pelo “pai” usando @PrimaryKeyJoinColumn, e usando extends no filho com a classe pai, então uma solução seria:

Você pode montar um método de pesquisar cujo por parâmetro será passado o objeto filho, entretanto o criteria será criado pela classe do objeto pai.
Em seguida adicione um criteria com restrição de “equals” , referenciando o nome do campo sequencial do pai e o valor desse campo.
E ao pedir o uniqueResult ao hibernate faça o “Cast” para a classe filho que seria entao o objeto final que teria todos os dados, dados do filho e os dados do seu respectivo pai.

Um exemplo da situação explanda abaixo:

	public FilhoDTO consultar(FilhoDTO dto) throws Exception {
		Criteria criteria = HibernateUtility.getSession().createCriteria(PaiDTO.class);
		
		Example exemplo = Example.create(dto);
		exemplo.ignoreCase();
		criteria.add(exemplo);
		
		if (dto.getSequencial() != null && dto.getSequencial().compareTo(new Long(0)) != 0) {
			criteria.add(Restrictions.eq("paiSequencial", dto.getSequencial()));			
		}
		dto = (FilhoDTO) criteria.uniqueResult();
		return dto;
	}

Espero que possa ajudar,

GrBraz’

[quote=bonfarj]Imaginem que uma classe Pedido possui um atributo List itensPedido. A classe ItemPedido é abstrata, temos duas especializações, as classes ItemPedidoProducao e ItemPedidoFaturamento.

Eu queria criar uma consulta que retorna todos os pedidos onde itensPedido possui ao menos um ItemPedidoFaturamento. Como é possível fazer isso? Usei discriminator para o mapeamento, provisoriamente um amigo fez uma query com SQL para contornar o problema, mas queria fazer com HQL ou Criteria.

abraços!

[/quote]

Qual o objetivo da consulta? Se for apenas para usar em relatório, talvez seja melhor usar jdbc/sql mesmo pois usando uma abordagem OO vc vai ter que iterar itensPedido pra saber se tem alguém que seja instanceof ItemPedidoFaturamento e acho que isto não vai ser tão performático quanto uma query sql simples e direta usando exists.
Não sei se tem alguma forma ou hint pra resolver isto mais facilmente com ORM.

[]s