Problema para salvar em tabelas com relacionamento

11 respostas
rockstom

Pessoal, estou com dificuldades para salvar registros nas tabelas que tem relacionamentos, estou usando o Hibernate e o Banco MySQL.

11 Respostas

drsmachado

Sabe o que acontece? Minha bola de cristal tá sem rede… E não consigo adivinhar qual o tipo de problema que um ser que sequer sabe formular uma pergunta pode passar.
Portanto, se não for muito difícil, coloca a droga do erro e as classes envolvidas. Claro, se não for muito incomodo isso.

mariofilho82

drsmachado calma meu jovem assim você vai valer a fama que todo programador é estressado, rockstom exponha o seu problema detalhadamente com o código para podermos analisar!

CharlesAlves

Dá uma pesquisada nas annotations de relacionamentos do hibernate

@oneToOne
@oneToMany
@manyToMany

pra que a ajuda possa ser mais eficiente como já disse Mario Filho, você tem que colocar algum código de exemplo, ou ainda se possível postar as Exceptions que estão sendo lançadas.

rockstom

cad = new Cadcontato(); //cad.setIdCont(Integer.parseInt(jTextCodigo.getText())); cad.setBairroCont(jTextBairro.getText()); cad.setCidade(null); cad.setDataNascCont(jTextData.getText()); cad.setEmailCont(null); cad.setLogradouroCont(jTextLog.getText()); cad.setNomeCont(jTextNome.getText()); cad.setObsCont(jTextObs.getText()); cad.setTelCont(null); try { dao.Insert(); HQL = "FROM Cadcontato"; //setJtable(); } catch (Exception erro) { JOptionPane.showMessageDialog(null, erro, "Mensagem", JOptionPane.ERROR_MESSAGE); }

Está é a parte do código que salva no banco de dados. Os campos ‘Email’, ‘Cidade’ e ‘Telefone’, são atributos de outra tabela e possuem relacionamento com a tabela de Cadastro de Contatos. Como faço para salvar os registros nesses campos?

CharlesAlves

vixi ainda tah difícil, no seu caso esta parte de código não vai influenciar em como persistir os dasdos, o que nos precisamos para te ajudar é da parte em que você está fazendo o mapeamento das classes que serão salvas no banco, e outra coisa como este metodo dao.insert está funcionando, porque não há nenhum parametro sendo passado para ele como ele sabe oq eu deve salvar?!

drsmachado

Camarada, não sou estressado.
Não falei nada fora da realidade.

rockstom

cad = new Cadcontato(); //cad.setIdCont(Integer.parseInt(jTextCodigo.getText())); cad.setBairroCont(jTextBairro.getText()); cad.setCidade(null); cad.setDataNascCont(jTextData.getText()); cad.setEmailCont(null); cad.setLogradouroCont(jTextLog.getText()); cad.setNomeCont(jTextNome.getText()); cad.setObsCont(jTextObs.getText()); cad.setTelCont(null); try { dao = new DAOClass(cad); dao.Insert(); HQL = "FROM Cadcontato"; //setJtable(); } catch (Exception erro) { JOptionPane.showMessageDialog(null, erro, "Mensagem", JOptionPane.ERROR_MESSAGE); }
Muito obrigado Charles vc tinha razão eu não estava passando parâmetro nenhum, tinha me esquecido de iniciar o objeto da classe DAO;
Mas ainda esta dando um erro quando tento gravar desse jeito que esta ai.

Initial SessionFactory creation failed.org.hibernate.MappingException: <mapping> element in configuration specifies no attributes Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError

Hebert_Coelho

rockstom:
Mas ainda esta dando um erro quando tento gravar desse jeito que esta ai.

Initial SessionFactory creation failed.org.hibernate.MappingException: <mapping> element in configuration specifies no attributes Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError


A classe que você está persistindo no DB tem algum relacionamento com outras classes? Parece ser isso que ele está reclamando.

Como está seu arquivo de configurações?

rockstom
Sim Tem relacionamentos com outras classes. O arquivo de configuração está ok.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/MyAgenda</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping resource="Entidades/Cadcontato.hbm.xml"/>
    <mapping resource="Entidades/EmailCont.hbm.xml"/>
    <mapping/>
    <mapping resource="Entidades/Uf.hbm.xml"/>
    <mapping resource="Entidades/TelCont.hbm.xml"/>
    <mapping resource="Entidades/Cidade.hbm.xml"/>
    <mapping resource="Entidades/Usuario.hbm.xml"/>
    <mapping/>
    <mapping/>
    <mapping resource="Entidades/Historico.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
As classes relacionadas ficam assim:
public class Cadcontato  implements java.io.Serializable {


     private Integer idCont;
     private TelCont telCont;
     private EmailCont emailCont;
     private Cidade cidade;
     private String nomeCont;
     private String dataNascCont;
     private String bairroCont;
     private String logradouroCont;
     private String obsCont;

    public Cadcontato() {
    }

    public Cadcontato(TelCont telCont, EmailCont emailCont, Cidade cidade, String nomeCont, String dataNascCont, String bairroCont, String logradouroCont, String obsCont) {
       this.telCont = telCont;
       this.emailCont = emailCont;
       this.cidade = cidade;
       this.nomeCont = nomeCont;
       this.dataNascCont = dataNascCont;
       this.bairroCont = bairroCont;
       this.logradouroCont = logradouroCont;
       this.obsCont = obsCont;
    }
public class TelCont  implements java.io.Serializable {


     private Integer idTelCont;
     private String descTelCont;
     private Set cadcontatos = new HashSet(0);

    public TelCont() {
    }

    public TelCont(String descTelCont, Set cadcontatos) {
       this.descTelCont = descTelCont;
       this.cadcontatos = cadcontatos;
    }
Hebert_Coelho
rockstom:
O arquivo de configuração está ok.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/MyAgenda</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping resource="Entidades/Cadcontato.hbm.xml"/>
    <mapping resource="Entidades/EmailCont.hbm.xml"/>
    <mapping/>
    <mapping resource="Entidades/Uf.hbm.xml"/>
    <mapping resource="Entidades/TelCont.hbm.xml"/>
    <mapping resource="Entidades/Cidade.hbm.xml"/>
    <mapping resource="Entidades/Usuario.hbm.xml"/>
    <mapping/>
    <mapping/>
    <mapping resource="Entidades/Historico.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
Será? Pq q tem um monte de perdido por aí? E olha oq sua msg de erro está retornando...
rockstom

Muito obrigado Jakefrog um dos erros era esse mesmo, os outros eram erros de lógica, mas já está rodando direitinho.

Criado 2 de março de 2012
Ultima resposta 6 de mar. de 2012
Respostas 11
Participantes 5