1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

DataTable com campos de duas tabelas

Olá, estou com uma dúvida de como fazer meu dataTable apresentar campos de 2 tabelas.

Tenha a tabela MENSAGEM(id, id_remetente, assunto, mensagem, dt_envio) e a tabela MENSAGEM_DESTINATARIO(id, id_mensagem, id_usuario, status, dt_leitura).

Gostaria que meu dataTable da Mensagem mostrasse o status (lido/não lido) que está na outra tabela.

Segue abaixo o código:

public List<TgrMensagem> consultaMensagem() {

        toReturnList = new ArrayList<TgrMensagem>();

        try {

            StringBuilder sb = new StringBuilder();

            String query = "SELECT MSG.*, MSGDEST.STATUS FROM TGR_MENSAGEM MSG INNER JOIN TGR_MENSAGEM_DESTINATARIO MSGDEST ON MSG.GUID = MSGDEST.GUID AND MSG.ID_TGR_MENSAGEM = MSGDEST.ID_MENSAGEM";

            Query q = tgrMensagemDao.createSQLquery(query, TgrMensagem.class);

            toReturnList = q.getResultList();


        } catch (NoResultException nre) {
            toReturnList = null;
        } catch (RuntimeException re) {
            logger.error("[consultaMensagem] Erro na consulta: ", re);
            toReturnList = null;
        }
        return toReturnList;

    }
<rich:dataTable 
                                                  id="hDTableEntrada"  
                                                  sortMode="single" 
                                                  var="Mensagem" 
                                                  rows="10"
                                                  value="#{Pedagogico$CentralMensagem.listaMensagem}"
                                                  styleClass="hDTableOcorrencia"
                                                  onRowMouseOver="this.style.backgroundColor='#BFDFEA'; this.style.cursor='pointer';" 
                                                  onRowMouseOut="this.style.backgroundColor='#FFF';">



                                                  <f:facet name="header">
                                                      <rich:columnGroup>
                                                          <rich:column>
                                                              <h:outputText value="Status" />
                                                          </rich:column>

                                                          <rich:column>
                                                              <h:outputText value="Remetente" />
                                                          </rich:column>

                                                          <rich:column>
                                                              <h:outputText value="Assunto" />
                                                          </rich:column>

                                                          <rich:column>
                                                              <h:outputText value="Data" />

                                                          </rich:column>


                                                      </rich:columnGroup>
                                                  </f:facet>

                                                <h:column>
                                                    <h:outputText value="#{Mensagem.status}"/>

                                                </h:column>  

                                                <h:column>
                                                    <h:outputText value="#{Mensagem.idRemetente}"/>
                                                </h:column>

                                                <h:column>
                                                    <h:outputText value="#{Mensagem.assunto}"/>
                                                </h:column>

                                                <h:column>
                                                    <h:outputText value="#{Mensagem.dtEnvio}"/>
                                                </h:column>



                                                  <f:facet name="footer">
                                                      <rich:datascroller id="sc" for="hDTableEntrada"/>
                                                  </f:facet>

                                              </rich:dataTable>

Como faço para na sql vir o conteúdo desse campo e conseguir apresentar na minha dataTable? Ja tentei criar um campo transient statu na minha entidade Mensagem, mas não vem o valor.

Podem me ajudar?

  • Já trabalhou com DTO? Uma outra opção é se quiser usar o Transient que criou acredito que o ideal seria usar native query.

    Sophie Vergueiro   19 de jun de 2015
  • Sophie, obrigado. vou pesquisar DTO.

    Douglas Gripp Emerick   19 de jun de 2015
  • DTO eu uso mais quando são varios campos de outra ou outras tabelas, mas no seu caso que precisa de um só atributo não se se seria o caso, eu usuaria o Transient e faria a query. Se tiver dificuldade com a query posso tentar te ajudar.

    Sophie Vergueiro   19 de jun de 2015
  • Sophie, muito obrigado!! No código que eu postei tem a query que fiz: "SELECT MSG.*, MSGDEST.STATUS FROM TGR_MENSAGEM MSG INNER JOIN TGR_MENSAGEM_DESTINATARIO MSGDEST ON MSG.GUID = MSGDEST.GUID AND MSG.ID_TGR_MENSAGEM = MSGDEST.ID_MENSAGEM"; Só que no meu result o campo status vem como nulo. Executando a query direto na base retorna o valor correto. Não estou conseguindo retornar esse status no campo transiente que criei.

    Douglas Gripp Emerick   19 de jun de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags jpa jsf java ou faça a sua própria pergunta.