Retornar de duas tabelas para objeto, camadas, hibernate

3 respostas
R

olá, tenho esses códigos abaixo, em camadas com hibernate,retornando dados de uma tabela, porém precisava também retornar da tabela cidade, ou seja retornar dados de duas tabelas,para o mesmo objeto.

Continuarei pesquisando, mas se puderem ajudar agradeço.

//GUI
 private void buscarCep() {
        EnderecoRN enderecoRN = new EnderecoRN();
        endereco = enderecoRN.buscaEndereco(jFCep.getText().replace("(", "").replace(")", "").replaceAll("-", ""));
        jTRua.setText(endereco.getEnderecoLogradouro());
//RN
public Endereco buscaEndereco(String ENDERECO_CEP) {
       //throw new UnsupportedOperationException("Not yet implemented");
        EnderecoPers endPers= new EnderecoPers();
        return endPers.buscaEndereco(ENDERECO_CEP);
//Pers
public Endereco buscaEndereco(String ENDERECO_CEP ) {
        //throw new UnsupportedOperationException("Not yet implemented");
        Conexao1 con= new Conexao1();
        Query buscaE=con.session.createQuery("from Endereco where endereco_cep=:pcep");
        buscaE.setString("pcep",ENDERECO_CEP);
        Endereco endereco=null;
        if(buscaE.list().iterator().hasNext()){
            endereco=(Endereco)buscaE.list().get(0);
        }
        con.desconectar();
        return endereco;
        }

3 Respostas

R

bom, se vc estiver tendo um erro de lazy initialization, seu mapeamento de endereco para cidade deve estar como lazy certo? se for, o problema ocorre pq o hibernate não carrega a referencia, e quando vc tenta acessar aquele objeto sua session com hibernate já foi fechada, tente pegar o objeto cidade antes de encerrar a session, frameworks como Seam e Spring tratam muito bem disso, outra maneira de “contornar” e marcar o relacionamento como eager, o que é ruim em alguns casos, pois, sua pesquisa sempre carregará os dados amarrados, mesmo qnd vc não usa.

R

obrigado pela dica, porém este código só me retorna o nome da rua, que está na tabela endereco.
quanto a fazer com que retorne o bairro que está na tabela bairro eu não sei como fazer,
a sql até não é o problema.Mas acredito que tenha mais algoa ser feito.
até a parte de retornar somente a rua está funcionando ok.
O que não sei fazer é como retornar para o mesmo objeto dados de duas tabelas.
Esta parte eu não consegui fazer

obrigado

R

Olá, estou postando novamente os códigos, com algumas alterações,
porém ainda não consegui retornar os dados corretamente, agora está me dando o erro abaixo e na sequencia seguem os códigos.
Desde já agradeço!

INFO: Not binding factory to JNDI, no JNDI name configured
Exception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: Exception while trying to autodiscover types.
        at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:508)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1796)
        at org.hibernate.loader.Loader.doQuery(Loader.java:674)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        at org.hibernate.loader.Loader.list(Loader.java:2099)
        at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
        at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
        at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
        at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
        at Pers.BuscaEnderecoPers.verificaEndereco(BuscaEnderecoPers.java:31)
        at RN.BuscaEnderecoRN.verificaEndereco(BuscaEnderecoRN.java:20)
        at GUI.MembroGUI.buscarCep(MembroGUI.java:632)
        at GUI.MembroGUI.jBBuscaCepActionPerformed(MembroGUI.java:556)
        at GUI.MembroGUI.access$300(MembroGUI.java:29)
        at GUI.MembroGUI$4.actionPerformed(MembroGUI.java:358)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 260
CHARACTER_LENGTH
        at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:81)
        at org.firebirdsql.jdbc.FBConnection.prepareStatement(FBConnection.java:243)
        at org.firebirdsql.jdbc.FBConnection.getStatement(FBConnection.java:1178)
        at org.firebirdsql.jdbc.FBConnection.doQuery(FBConnection.java:1203)
        at org.firebirdsql.jdbc.FBResultSetMetaData.getExtendedFieldInfo(FBResultSetMetaData.java:821)
        at org.firebirdsql.jdbc.FBResultSetMetaData.getExtFieldInfo(FBResultSetMetaData.java:651)
        at org.firebirdsql.jdbc.FBResultSetMetaData.getPrecision(FBResultSetMetaData.java:321)
        at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:558)
        at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
        at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
        ... 41 more
//GUI
private void buscarCep() {

        BuscaEnderecoRN enderecoRN = new BuscaEnderecoRN();
        endereco = enderecoRN.verificaEndereco(jFCep.getText().replace("(", "").replace(")", "").replaceAll("-", ""));
        jTRua.setText(endereco.getEnderecoLogradouro());
        jTBairro.setText(endereco.getBairro().getBairroDescricao());
        jTCidade.setText(endereco.getBairro().getCidade().getCidadeDescricao());
}
//RN

public class BuscaEnderecoRN {

    public Endereco verificaEndereco(String ENDERECO_CEP) {
            BuscaEnderecoPers endPers= new BuscaEnderecoPers();
            return endPers.verificaEndereco(ENDERECO_CEP);


    }

}
//Pers

public class BuscaEnderecoPers {

    public Endereco verificaEndereco(String ENDERECO_CEP) {
       
         Conexao1 con = new Conexao1();
         Query buscaE = con.session.createSQLQuery("select bairro_descricao, cidade_descricao, endereco_logradouro, uf_sigla from bairro, cidade, endereco, uf "+
"where endereco_cep="+ENDERECO_CEP+" and endereco.bairro_codigo=bairro.bairro_codigo and bairro.cidade_codigo=cidade.cidade_codigo and cidade.uf_codigo=uf.uf_codigo");

       buscaE.setString("pcep", ENDERECO_CEP);

        Endereco endereco = new Endereco();
        Bairro consBairro =new Bairro();
        Cidade consCidade= new Cidade();
      
       if(buscaE.list().iterator().hasNext()) {
              consBairro.setBairroDescricao(buscaE.list().get(0).toString());
              consCidade.setCidadeDescricao(buscaE.list().get(1).toString());
              endereco.setEnderecoLogradouro(buscaE.list().get(2).toString());
              consBairro.setCidade(consCidade);
              endereco.setBairro(consBairro);
        }
        con.desconectar();
        return endereco;
    }
  
}
Criado 4 de abril de 2011
Ultima resposta 6 de abr. de 2011
Respostas 3
Participantes 2