Herança no Hibernate

olah, pppessoal!

Tenho duas classes, Pessoa e Advogado. A Pessoa jah estava cadastrada no banco de dados e eu necessito que essa Pessoa se torne um Advogado. nesse caso, o meu mapeamento de Advogado ficaria da seguinte maneira:

[code] <hibernate-mapping>
<joined-subclass name="br.com.solucoesideais.admOffice.beans.Advogado" extends = "br.com.solucoesideais.admOffice.beans.Pessoa" table="advogados">
<key column="pessoa_id"/>

            &lt;property name=&quot;oab&quot; type=&quot;java.lang.String&quot; column=&quot;oab&quot;/&gt;

        &lt;/joined-subclass&gt;            
&lt;/hibernate-mapping&gt;

[/code]

o código que persistiu o Advogado ficou assim:

        Pessoa pessoaTmp = &#40;Pessoa&#41; pessoas.get&#40;pessoasJList.getSelectedIndex&#40;&#41;&#41;; //cria uma nova pessoa
        advogado = new Advogado&#40;pessoaTmp&#41;; cria um novo advogado e esse objeto pessoaTmp é utilizado por advogado pra preencher os dados de pessoa desse advogado pois nao consegui fazer por casting
        advogado.setOab&#40;oabJText.getText&#40;&#41;&#41;;
        try &#123;
            advogadoDAO = new AdvogadoDAO&#40;&#41;;
            advogadoDAO.insert&#40;advogado&#41;;
        &#125; 

Acontece que o hibernate criou uma nova pessoa e a associou com o advogado (talvez fosse o esperado mas não pra mim). como faço pra ele associar o novo advogado à pessoa já existente sem criar uma nova linha na tabela de Pessoas?

Por favor, poste o mapeamento de pessoa e o código de advogadoDAO.insert(advogado).

Fallow.

[code] public void insert(Advogado advogado) throws Exception {
Session session = sessionFactory.openSession();
session.save(advogado);
session.flush();
session.close();
}

public void update(Advogado advogado) throws Exception {
Session session = sessionFactory.openSession();
session.saveOrUpdate(advogado);
session.flush();
session.close();
}[/code]

[code]
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

&lt;hibernate-mapping&gt;
    &lt;class name=&quot;br.com.solucoesideais.admOffice.beans.Pessoa&quot; table=&quot;pessoas&quot;&gt;
        &lt;id name=&quot;id&quot; column=&quot;id&quot; type=&quot;java.lang.Long&quot; unsaved-value=&quot;null&quot;&gt;
            &lt;generator class=&quot;native&quot;/&gt;
        &lt;/id&gt;
        &lt;property name=&quot;nome&quot; type=&quot;java.lang.String&quot; column=&quot;nome&quot; length=&quot;100&quot; not-null=&quot;true&quot;/&gt;

        &lt;set name=&quot;telefones&quot; inverse=&quot;true&quot; cascade=&quot;all-delete-orphan&quot;&gt;
            &lt;key column=&quot;pessoa_id&quot;/&gt;
                &lt;one-to-many class=&quot;br.com.solucoesideais.admOffice.beans.Telefone&quot;/&gt;
        &lt;/set&gt;

        &lt;set name=&quot;emails&quot; inverse=&quot;true&quot; cascade=&quot;all-delete-orphan&quot;&gt;
            &lt;key column=&quot;pessoa_id&quot;/&gt;
                &lt;one-to-many class=&quot;br.com.solucoesideais.admOffice.beans.Email&quot;/&gt;
        &lt;/set&gt;

        &lt;set name=&quot;enderecos&quot; inverse=&quot;true&quot; cascade=&quot;all-delete-orphan&quot;&gt;
            &lt;key column=&quot;pessoa_id&quot;/&gt;
                &lt;one-to-many class=&quot;br.com.solucoesideais.admOffice.beans.Endereco&quot;/&gt;
        &lt;/set&gt;
    &lt;/class&gt;


    &lt;/hibernate-mapping&gt;
[/code]

André,

não entendo o pq desse extends… acho q ele não significa muito bem o q vc está imaginando… mas tb não sei te explicar como ele funciona… :stuck_out_tongue:

de qq maneira, eu implementaria sem o extends, colocando um relacionamento one-to-one no mapeamento de Pessoa:

<one-to-one name="advogado"
class="Advogado"
constrained=“true”/>

para criar somente o advogado… vc precisa trazer a Pessoa e “setar o advogado nela”…dessa maneira o relacionamento é respeitado:

Pessoa p = session.get(Pessoa.class, uid);
Advogado adv = new Advogado(1234);
p.setAdvogado(adv)

Espero ter ajudado. De qq maneira, poste a solução q vc adotou aí…

Abraço.

[quote=“Taz”]André,

não entendo o pq desse extends… acho q ele não significa muito bem o q vc está imaginando… mas tb não sei te explicar como ele funciona… :stuck_out_tongue:
[/quote]
Esse extends quer dizer que Advogado é uma pessoa e eu gostaria de fazer utilizando herança nao soh com o hibernate mas também na aplicação. Estou salvando a Pessoa antes por que a mesma pode ser várias outas coisas (Cliente, Fornecedor, Funcionario etc…)