Herança com o hibernate

4 respostas
Gilmar_Rodrigues

Ae pessoal, alguém saberia me dar um exemplo de como fazer o mapeamento de 2 classes q exetendem alguma outra?

Tentei uma coisa assim e nao consegui

/**
 * @hibernate.class 
 */
public class Pessoa {
   // campos comuns apenas, nada demais...
}

/**
 * @hibernate.subclass
 */
public class PessoaFisica extends Pessoa {

// nada demais aqui tb

}

Tem a mesma coisa pra outra classe PessoaJuridica.

Alguma luz???

4 Respostas

ricardolecheta
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>

	<class name="vo.PessoaVO" table="Pessoa" discriminator-value="P" >

		<id name="id" column="id" type="long">
			<generator class="sequence"/>
		</id>

		<discriminator column="subclass" type="character"/>

		<property name="name1" type="string" />

		<subclass name="vo.PessoaFisicaVO" discriminator-value="F">
			<property name="name2" type="string"/>
		</subclass>

	</class>

</hibernate-mapping>
ricardolecheta

vc tambem pode usar assim: A diferença é que deste modo terá mais uma tabela.

<joined-subclass name="vo.PessoaFisicaVO" table="PESSOA_JURIDICA">
              <key column="PESSOA"/>
              <property name="name2" type="string"/>
</joined-subclass>

No post anterior a persistência será feita na mesma tabela, para isso existe o “discriminator-value”, que indica ao Hibernate qual é o objeto, Pessoa ou PessoaJuridica.

<discriminator column="subclass" type="character"/>

ricardolecheta

e em XDoclet:

/**
 * @hibernate.class table="Pessoa" discriminator-value="P"
 *
 */
public class PessoaVO implements Serializable {
/**  
 *  @hibernate.subclass discriminator-value="F"
 * 
 * */
public class PessoaFisicaVO extends PessoaVO implements Serializable {
Gilmar_Rodrigues

Opa, Valeu ricardo, consegui fazer o q eu queria.

Criado 9 de março de 2004
Ultima resposta 10 de mar. de 2004
Respostas 4
Participantes 2