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