Herança no Hibernate

4 respostas
A

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:
<hibernate-mapping>
            <joined-subclass name="br.com.solucoesideais.admOffice.beans.Advogado" extends = "br.com.solucoesideais.admOffice.beans.Pessoa" table="advogados">
                <key column="pessoa_id"/>

                <property name="oab" type="java.lang.String" column="oab"/>

            </joined-subclass>            
    </hibernate-mapping>
o código que persistiu o Advogado ficou assim:
Pessoa pessoaTmp = (Pessoa) pessoas.get(pessoasJList.getSelectedIndex()); //cria uma nova pessoa
        advogado = new Advogado(pessoaTmp); 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(oabJText.getText());
        try {
            advogadoDAO = new AdvogadoDAO();
            advogadoDAO.insert(advogado);
        }

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?

4 Respostas

T

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

Fallow.

A
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();
  }
<?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">

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

            <set name="telefones" inverse="true" cascade="all-delete-orphan">
                <key column="pessoa_id"/>
                    <one-to-many class="br.com.solucoesideais.admOffice.beans.Telefone"/>
            </set>

            <set name="emails" inverse="true" cascade="all-delete-orphan">
                <key column="pessoa_id"/>
                    <one-to-many class="br.com.solucoesideais.admOffice.beans.Email"/>
            </set>

            <set name="enderecos" inverse="true" cascade="all-delete-orphan">
                <key column="pessoa_id"/>
                    <one-to-many class="br.com.solucoesideais.admOffice.beans.Endereco"/>
            </set>
        </class>


        </hibernate-mapping>
T

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.

A

“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:


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…)

Criado 9 de junho de 2005
Ultima resposta 14 de jun. de 2005
Respostas 4
Participantes 2