ordenação primefaces com campos transient

oi galera,

estou com uma dificuldade em fazer ordenação em colunas que não são do banco.
A principio, tenho uma tabela de cliente, e tenho uma entidade não persistente, que possui essa estrutura:

mas dai preciso dar opcao pro sistema permitir ordenar por valor de venda, por valor faturado, etc.

Estou usando Jsf2 com primefaces 3.4

No LazyList eu tenho um metodo que faz um select … order by “nome do campo”.

Mas por exemplo, se ele for montar:

 select from Cliente c order by c.valorFaturado

ele da esse erro:

Grave: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query

Olá,

Sua query esta errada!

Faça isso:

   select c from Cliente c order by c.valorFaturado 

Ou Isso:

   from Cliente c order by c.valorFaturado 

abraço!

não entendi o erro…minha query está desse jeito que vc falou :shock:

a pergunta que não quer calar: é possivel ordenar sem ter o campo persistido no banco?

Agora entendi o que você esta falando, e a resposta para isso é não, pois o hibernate não saberá referenciar esse atributo com uma coluna na base de dados.

Mas, porque você não usa o campo que você tem mapeado, ou seja não transient?

Uma outra maneira de resolver esse problema seria você fazer uma query fazendo a ordenação e as somatórias necessárias e retornar o seu objeto usando o Transformer do Hibernate.

Exemplo:

  [code]
    Query query = this.sessionFactory.getCurrentSession().createQuery(
			"select sum(o.valor) as valorFaturado, c.id as id  from Cliente  c join c.compras o"
			+ "		where c = :cliente  order by sum(o.valor));
	
            query.setParameter("cliente", cliente);
	query.setResultTransformer(Transformers.aliasToBean(Cliente.class));
  [/code]
 
 No seu cliente.class passado no Transformers ele irá buscar o atributo   valorFaturado que é um trasiente e irá inserir o valor, assim como um id e quantos parametros forem necessários.

 Eu fiz um exemplo qualquer não sei como esta o seu modelo de dados e como vc faria para somar todos os valores, se você colocar seu modelo de dados aqui eu te ajudo a montar a query.

Qualquer dúvida me avise!

abraço