Pegar o valor do campos após o query.list()

11 respostas
G

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?

11 Respostas

Hebert_Coelho

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.

G

Ola Hebert,

no meu caso, <h:outputText value="#{cotac.get(0)}", deveria colocar:

<h:outputText value="#{cotac.fornecedor.nome} ???

Seria fácil assim?

Hebert_Coelho

GustavoFreitas:
Ola Hebert,

no meu caso, <h:outputText value="#{cotac.get(0)}", deveria colocar:

<h:outputText value="#{cotac.fornecedor.nome} ???

Seria fácil assim?

Você tentou? O que aconteceu?

G

Me da erro de sintaxe, o nome do objeto que coloqui após o cotac, substituindo o get, não funcionou.

Hebert_Coelho

GustavoFreitas:
Me da erro de sintaxe, o nome do objeto que coloqui após o cotac, substituindo o get, não funcionou.
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.

G

Meu bena é assim:

<a class="mention" href="/u/named">@Named</a>(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?

Rodrigo_Sasaki

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]}" />

Rodrigo_Sasaki

Ops, ignore a mensagem acima, eu li bobagem na sua query, não vi que era HQL

G

Joins assim retornam o Objetcs[] não é?

Rodrigo_Sasaki

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

G

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

Criado 10 de janeiro de 2014
Ultima resposta 13 de jan. de 2014
Respostas 11
Participantes 3