Persistencia Hibernate tabela associativa n:n

0 respostas
K
Boa tarde pessoal, estou iniciando com hibernate e me deparei com um problema. Fiz engenharia reversa da minha base postgres pelo netbeans. Umas das tabelas da base é um relacionamento n:n, criada a partir da tbPessoa e tbArea (area de interesse da pessoa). Gravo normalmente pessoa e area, mas não consigo gravar na tabela associativa. Li vários fóruns e não resultou em muita coisa.Segue o codigo que estou implementando. Pessoa.hbm
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 24/07/2014 10:14:43 by Hibernate Tools 3.6.0 -->
<hibernate-mapping>
    <class name="principal.Pessoa" table="pessoa" schema="public">
        <id name="idpessoa" type="int">
            <column name="idpessoa" />
            <generator class="increment" />
        </id>
        <property name="nome" type="string">
            <column name="nome" length="30" />
        </property>
        <property name="email" type="string">
            <column name="email" length="30" />
        </property>
        <property name="numero" type="string">
            <column name="numero" length="5" />
        </property>
        <property name="rua" type="string">
            <column name="rua" length="30" />
        </property>
        <property name="cidade" type="string">
            <column name="cidade" length="20" />
        </property>
        <property name="estado" type="string">
            <column name="estado" length="20" />
        </property>
        <property name="telefone" type="string">
            <column name="telefone" length="14" />
        </property>
        <property name="fax" type="string">
            <column name="fax" length="14" />
        </property>
        <set name="comites" table="comite" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <one-to-many class="principal.Comite" />
        </set>
        <set name="sessaos" table="sessao" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idpessoa" />
            </key>
            <one-to-many class="principal.Sessao" />
        </set>
        <set name="areas" table="pessoaarea" inverse="true"  lazy="true" fetch="select">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <many-to-many entity-name="principal.Area">
                <column name="idarea" not-null="true" />
            </many-to-many>
        </set>
        <set name="avaliacaos" table="avaliacao" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <one-to-many class="principal.Avaliacao" />
        </set>
        <set name="usuarios" table="usuario" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <one-to-many class="principal.Usuario" />
        </set>
        <set name="artigos" table="autor" inverse="false" lazy="true" fetch="select">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <many-to-many entity-name="principal.Artigo">
                <column name="idartigo" not-null="true" />
            </many-to-many>
        </set>
    </class>
    <query name = "BuscaPessoa">
        <![CDATA[from Pessoa where nome = :pPessoa]]>
    </query>
</hibernate-mapping>
Persistencia pessoa
public String SavePessoa(principal.Pessoa PVO){
        try {
            SessionFactory factory = new Configuration().
                    configure("pers/hibernate.cfg.xml").buildSessionFactory();
            Session session = factory.openSession();
            Transaction t = session.beginTransaction();
        //    PVO.setIdpessoa(10);
            session.save(PVO);
            t.commit();
            session.flush();
            session.close();
            mensagem = "Gravou com sucesso!";
        } catch (Exception e) {
            mensagem="Erro: "+e.getMessage();
        }           
        return mensagem;
    }
classe para gravar pessoa
principal.Pessoa PVO = new principal.Pessoa();
        PVO.setNome(jTFNome.getText());
        PVO.setEmail(jTFEmail.getText());
        PVO.setNumero(jTFNumero.getText());
        PVO.setRua(jTFRua.getText());
        PVO.setEstado(jTFEstado.getText());
        PVO.setCidade(jTFCidade.getText());
        PVO.setTelefone(jTFTelefone.getText());
        PVO.setFax(jTFFax.getText());
        String selecao = new String();
        selecao = jCBArea1.getSelectedItem().toString();
        String aux[] = selecao.split(Pattern.quote(":"));
        StringBuilder str = new StringBuilder();
        str.append(aux[0]);
        principal.Area AVO = new principal.Area();
        AVO =  new rn.AreaRN().SelecionarArea(Integer.parseInt(str.toString()));
        HashSet  h= new HashSet<Object>();
        h.add(AVO);       
        PVO.setAreas(h);
        PVO.getAreas().add(AVO);
        rn.PessoaRN pessoaRN = new PessoaRN();
        String mensagem = pessoaRN.CreatePessoa(PVO);
        if (mensagem != null) {
            JOptionPane.showMessageDialog(null, mensagem);
        }
O código acima grava pessoa, mas não a tabela associativa e não gera nenhuma exceção ou erro. Tentei colocar a imagem do debug do netbeans mostrando que o PVO está com o idPessoa e idArea, só que não grava nenhum na tabela associativa
Criado 3 de agosto de 2014
Respostas 0
Participantes 1