Boa tarde.
Esotu começando a desenvolver um projeto com hibernate e me deparei com o seguinte problema.
No hibernate quado você faz uma query em uma tabela do banco de dados, o retorno é uma classe mapead. Até entao é molezinha, o resultado é um List e por ai vai.
Mas e quando a minha query é um join que envolve quatro tabelas? Como faço para pegar o conteúdo de alguns campos dessa query e colocar em uma coluna de um datatable do primefaces?
fiz o seguinte método para buscar os registros:
public List listar() {
Transaction tx = null;
Session session = HibernateUtil.getSessionFactory().openSession();
String sql = “from Fornecedor f \n”
+ “inner join f.cotacaoFornecedors as cf\n”
+ “inner join cf.formaPagamento\n”
+ “inner join cf.cotacao”;
try {
tx = session.beginTransaction();
Query query = session.createQuery(sql);
return query.list();
} catch (RuntimeException e) {
tx.rollback();
throw e;
}
A quantidade de registros retornao está correta, mas quando vou implementar o datatable não estou sabendo colocar os campos a serem mostrados. Estou fazendo dessa forma
<p:dataTable var=“cotac” value="#{cotacoesBean.listaCotacoes}">
<p:column headerText=“Data Inicio”>
<h:outputText value="#{cotac.get(0)}"
</p:column>
</p:dataTable>
Alguém pode me ajudar?
Você tem que colocar o nome do objeto e não get(0).
pessoa.nome por exemplo. Lembre-se que todos os atributos da classe devem ter get/set.
Ola Hebert,
no meu caso, <h:outputText value="#{cotac.get(0)}", deveria colocar:
<h:outputText value="#{cotac.fornecedor.nome} ???
Seria fácil assim?
[quote=GustavoFreitas]Ola Hebert,
no meu caso, <h:outputText value="#{cotac.get(0)}", deveria colocar:
<h:outputText value="#{cotac.fornecedor.nome} ???
Seria fácil assim?[/quote]Você tentou? O que aconteceu?
Me da erro de sintaxe, o nome do objeto que coloqui após o cotac, substituindo o get, não funcionou.
[quote=GustavoFreitas]Me da erro de sintaxe, o nome do objeto que coloqui após o cotac, substituindo o get, não funcionou.[/quote]Não funciona com o get. Seu código deve estar escrito com o padrão javabeans.
Cuidado ao começar com JSF, ele é fácil de começar mas é preciso que você saiba um básico.
Esse post aqui é um mini livro grátis de JSF: http://uaihebert.com/?p=1596
Aqui tem um hello world que explica os conceitos de JSF. http://uaihebert.com/jsf-hello-world-autocomplete/
Se quiser também, em minha assinatura tem links para projetos completos utilizando JSF.
Meu bena é assim:
@Named(value = “cotacoesBean”)
@SessionScoped
public class CotacoesBean implements Serializable {
List listaCotacoes = new ArrayList();
public CotacoesBean() {
listaCotacoes = new CotacoesDaoImpl().listar();
}
public List getListaCotacoes() {
return listaCotacoes;
}
public void setListaCotacoes(List listaCotacoes) {
this.listaCotacoes = listaCotacoes;
}
}
listaCotacoes é o resultado da query que faço com hirbernate correto? não estaria faltando uma variavel privada que receberia os campos da query?
Você tem um Array de objetos, não tem uma classe que envolva todos eles, pode:
1 - Criar uma classe pra isso (recomendado).
2 - Acessar o array
Pode tentar acessar o array assim:<h:outputText value="#{cotac[0]}" />
Ops, ignore a mensagem acima, eu li bobagem na sua query, não vi que era HQL
Joins assim retornam o Objetcs[] não é?
Acredito que não, porque são relacionamentos partidos da entidade principal da query, ele foi navegando, e o Hibernate trata isso.
Agora não sei se os \n deveriam estar ali, parecem estar faltando alguns espaços
Nada funcionou.
Eu só quero pegar um elemento de um Object[] que esta na posicao x,y. Esse object[] é resultado de uma querie executada com o hibernate.
Alguém tem alguma dica?
Obrigado