Projection usando aliasToBean e rowCount - não consigo usar os dois

3 respostas
E

Oi.

Tenho um código que lista livros, agrupados por autor.

Gostaria de adicionar uma “coluna” com o total dos autores por livro.

E a coluna “total” virou um nó para mim.

O motivo parece simples: estou usando Transformers.aliasToBean, e quando adiciono “rowCount” com o nome “total”, dá erro dizendo que não existe setter para essa propriedade (“total”) na classe que defini como Bean de referência para o Transformers.

E isso é verdade, claro.

Só que não sei avançar a partir daí…

Já procurei absurdos pela internet e não achei nada que pudesse me dar uma dica…

Ou, algo me dizendo que isso é estúpido e que a maneira correta é outra.

Alguém pode ajudar?

Ah sim, não seria problema se ao invés de usar aliasToBean eu simplesmente lidasse com os Object. Nesse caso eu simplesmente usaria rowCount() e leria o valor da “coluna” desejada, mas justamente quero evitar ler os “campos” através de índices numéricos (o que Object me obrigaria a fazer), por isso estou usando aliasToBean… mas aí caí no problema de ter que seguir as regras do bean.

Alguma idéia?

Deveria eu criar um Pojo só para esse resultado?

Criteria crit = this.session.createCriteria(Livro.class); ProjectionList proList = Projections.projectionList(); proList.add(Projections.rowCount(), "total" ); proList.add(Projections.property("autor"), "autor"); proList.add(Projections.groupProperty("autor")); crit.setProjection(proList).setResultTransformer(Transformers.aliasToBean((Livro.class))); List results = crit.list();

[]s
Esquizo

3 Respostas

peerless

Sim, usando Transformers tu terá que ter um POJO que represente o resultado.

[]s

G

Brother, vc não precisa criar POJO nenhuma…
É simples…
Você tem que criar um alias pro seu rowCount() e depois dar um

que funciona redondinho… Quando você for carregar, é só chamar pelo nome do alias…

W

Transformers.aliasToBean é para ser usado quando você não tem um objeto mapiado, no caso utilizando nativeQuery, isso é como se fosse um resultSet do JDBC, mas ele seta de acordo com o nome que está colocado na sua classe.

Criado 5 de maio de 2010
Ultima resposta 2 de ago. de 2012
Respostas 3
Participantes 4