Bom dia pessoal,estou com uma duvida no datatable.Estou querendo listar a partir da query
public List<Matricula> listarQTDAlunosPorEscola() {
Session sessao = sf.openSession();
Query query = null;
query = sessao.createSQLQuery("select e.nomeDaEscola,count (a.nome) \n"
+ "from Matricula m,Aluno a,Escola e \n"
+ "where a.id = m.aluno_id and e.id = m.escola_id \n"
+ "group by e.nomeDaEscola\n"
+ "order by e.nomeDaEscola");
List<Matricula> qtdAlunosPorEscola = query.list();
sessao.close();
return qtdAlunosPorEscola;
}
Minha query ja tem os valores que eu quero eu queria so jogar esta query em um datatable e pronto sem ter que colocar os valores que quero la na view.
Aguardo respostas.
Obrigada.
Aconteceu algum erro? Você chegou a executar isso?
Pelo o que eu entendi, você está tentando mapear 1 coluna e um count em uma entidade que já existe.
Isso não vai funcionar por 2 motivos:
1 - O que você está retornando não é uma Matricula, logo, isso: List<Matricula> qtdAlunosPorEscola = query.list(); não funciona.
2 - Para isso funcionar, você precisaria trazer todas as colunas de Matricula e ainda dizer ao Hibernate que você está querendo mapear essa Query em determinada entidade. Basta olhar o JavaDoc do Hibernate, é um método que você coloca depois do método createSQLQuery.
Se você não informar a entidade que o Hibernate deve mapear, ele vai retornar uma Lista de Array de Object, ou seja, isso: List<Object[]>
Então, para cada registro da sua lista, ficaria algo assim:
List<Object[]> list = query.list();
for (Object[] objs : list)
System.out.println("Escola: " + objs[0] + " - count: " + objs[1]);
Tem outra forma de fazer?
Como assim outra maneira? A que ele sugeriu não te atende?
Você pode criar uma class que mantenha esses atributos caso acha mais correto, mas do jeito que ele exemplificou você já consegue exibir na sua dataTable
Tem algum exemplo onde eu possa ver para me orientar?
Segui o modelo de Rafael Guerreiro mais na datatable esta exibindo como objeto - [Ljava.lang.Object;@287f8987
O que faco?
Nos mostre o seu código, fica mais fácil de entender onde pode estar o problema
DaoIMp
public List<Object[]> listarQTDAlunosPorEscola() {
Session sessao = sf.openSession();
Query query = null;
query = sessao.createSQLQuery("Select e.nomedaescola,count(a.nome) FROM Matricula m,Aluno a,Escola e \n"
+ " where a.id = m.aluno_id and e.id = m.escola_id \n"
+ " group by e.nomedaescola order by e.nomedaescola");
List<Object[]> escola = query.list();
for (Object[] objs : escola) {
Object escolas = objs[0].toString();
String contador = objs[1].toString();
System.out.println("Escola: " + escolas + " Qtd. Alunos: " +contador);
}
sessao.close();
return escola;
}
Bean
@ManagedBean
@ViewScoped
public class AlunoBean {
private Aluno aluno;
private AlunoDaoImp dao;
private List<Object[]> qtdAlunosPorEscola;
public AlunoBean() {
aluno = new Aluno();
dao = new AlunoDaoImp();
qtdAlunosPorEscola = dao.listarQTDAlunosPorEscola();
}
public List<Object[]> getQtdAlunosPorEscola() {
return qtdAlunosPorEscola;
}
public void setQtdAlunosPorEscola(List<Object[]> qtdAlunosPorEscola) {
this.qtdAlunosPorEscola = qtdAlunosPorEscola;
}
}
View
<p:dataTable id="alunos" var="alunos" value="#{alunoBean.qtdAlunosPorEscola}" paginator="true" rows="10" style="width: 880px;margin-top: 10px;font-size: 12px" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowIndexVar="rowIx" rowsPerPageTemplate="5,10,15">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Relatório de quantidade de alunos por escola" />
</p:outputPanel>
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Resultado" />
</f:facet>
<h:outputText value="#{alunos}" />
</p:column>
</p:dataTable>
OBS:So esta saindo o objeto na listagem.
como você tem um array você precisa mostrar qual índice você quer exibir. Fica algo mais ou menos assim:[code]<p:column>
<f:facet name=“header”>
<h:outputText value=“Nome” />
</f:facet>
<h:outputText value="#{alunos[0]}" />
</p:column>
<p:column>
<f:facet name=“header”>
<h:outputText value=“Quantidade” />
</f:facet>
<h:outputText value="#{alunos[1]}" />
</p:column>[/code]
Obrigado era isso mesmo que faltava.