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.
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.
[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.