Hibernate order by (resolvido)

4 respostas
L

Estou utilizando o hibernate para executar uma pesquisa no qual tenho duas tabelas…uma de pedido e outra de clientes… Sendo que a tabela de pedidos possui chave estrangeira de clientes… o problema é que a constraint de clientes na tabela de pedidos não é obrigatória , ou seja, pode ser nula… assim

PEDIDO                 CLIENTE
--------------------------------

CdPedido                ....
CdCliente   <-         CdCliente           
....                          ...

no xml do hibernate para executar a listagem de pedidos tenho assim

...
 <property name="dtEmissao" column="DTEMISSAO" type="java.util.Calendar" not-null="true"/>

 ...
  <many-to-one name="cliente"  class="br.com.empresa.bean.Cliente" column="CDCLIENTE"/>
...

  <query name="buscaPedidosOrdenados">
        <![CDATA[* FROM PEDIDO as p ORDER BY p.dtEmissao, p.cliente.cdCliente]]>
    </query>

Claro que tenhos várias queryes com where mas para dar um exemplo…
O problema é que como o cliente não é obrigatório, existem pedidos com clientes nulos, então não ordena certo…
Como posso fazer para ordenar os nulos , depois os pedidos que tem clientes… tentei o esquema de NULLS FIRST, mas sem sucesso… to usando o mysql e acho que não funciona isso nele…

Se alguém já passou por isso… e me ajudar como resolveu, agradeço

4 Respostas

georgesq

faz em duas pegadas irmão, pega os com null e depois os sem.

:slight_smile:

L

Valeu pela ajuda…vou tentar fazer isso…
depois posto os resultados

L

O problema é que presciso que a apresentação dos dados na tabela fique assim…

Cod       Cliente         Data              Valor ...
---------------------------------------------------
01                       10/10/2007     10,00
02                       11/10/2007     20,00
03       Alfredo         11/10/2007     20,00
04       Bernardo        11/10/2007     20,00
05                       12/10/2007     30,00
06                       12/10/2007     30,00
07       Alfredo         12/10/2007     20,00
08       Bernardo        12/10/2007     20,00

tipo…os nulls daquele dia antes e depois em ordem alfabética…depois os nulls do próximo dia e em ordem alfabética o restante…

L

Ae galera…resolvi o problema…

Encontrei a resolução no sql puro…
nem tinha percebido quando estava formulando o sql…
mas aí vai para quem estiver ou que venha ter o mesmo problema

...  
    <property name="dtEmissao" column="DTEMISSAO" type="java.util.Calendar" not-null="true"/>  
      
   ...  
    <many-to-one name="cliente"  class="br.com.empresa.bean.Cliente" column="CDCLIENTE"/>  
    ...  
      <!--Modificado o order by-->
    <query name="buscaPedidosOrdenados">  
            <![CDATA[* FROM PEDIDO as p 
                ORDER BY CASE WHEN
                 p.cliente IS NULL THEN 0
                ELSE
                p.cliente.cdCliente
            END]]>  
       </query>
Criado 22 de julho de 2008
Ultima resposta 23 de jul. de 2008
Respostas 4
Participantes 2