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