Hibernate: problemas com herança

Estou com um problema e não sei se é possível resolvê-lo no Hibernate.

Exemplo: imaginem 3 classes, Pessoa, Aluno e Professor.

  • Aluno e Professor são especializações de Pessoa
  • Pessoa é uma superclasse abstrata

Eu gostaria de fazer uma consulta no Hibernate que retornasse todos os objetos Pessoa do banco, só que eu recebo um erro pois o Hibernate tenta instanciar Pessoa, o que não é possível já a classe é abstrata. Tem como resolver isso? O Hibernate retornaria uma List, sendo que todos os seus objetos seriam ou Aluno ou Professor.

Eu até poderia tirar a palavra reservada “abstract” da classe Pessoa, mas o Hibernate não poderia deixar que o banco salvasse uma Pessoa que não fosse Aluno ou Professor.

Caso não tenham entendido eu posso tentar explicar de outra forma.

valeu pessoal! :wink:

&lt?xml version="1.0" encoding="UTF-8"?&gt
<!DOCTYPE hibernate-mapping 
	PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="scc.model.interfaces.impl">
<class name="ControleRecursoImpl" table="controle_recurso">
    <id name="identificador" column="cod_controle_recurso">
      <generator class="identity"/>
    </id>
	
	
	<property name="data"/>
	<property name="valor" />	
    
	
	
     <many-to-one 
		  name="contaUtilizada" 
		  class="ContaImpl"
		  column="cod_conta"
     />	
     

	

</class>

	
</hibernate-mapping>
&lt?xml version="1.0" encoding="UTF-8"?&gt
<!DOCTYPE hibernate-mapping 
	PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="scc.model.interfaces.impl">
<joined-subclass name="DespesaImpl" extends="ControleRecursoImpl" table="despesa">
    <key column="cod_despesa"/>
		
			
    		
	<property name="numeroParcelas"/>
		
     <many-to-one lazy="false"
		  name="formaPagamento" 
		  class="FormaPagamentoImpl"
		  column="cod_forma_pagamento"
     />	
	
     <many-to-one lazy="false"
		  name="itemCentroCusto" 
		  class="ItemCentroCusto"
		  column="cod_item_centro_custo"
     />		
     

	

</joined-subclass>

	
</hibernate-mapping>

Mas dessa forma nada impede que eu insira no banco um objeto da classe ControleRecursoImpl, não?

No meu caso, o hibernate deveria barrar a inserção de objetos da classe ControleRecursoImpl, mas deveria permitir um de ControleRecursoImpl, que conteria objetos DespesaImpl e outras classes filhas de ControleRecursoImpl.

Isso é possível?

alguma sugestão? :oops:

polymorphism=“explicit”, acrescente esse atributo no mapeamento de Aluno e Professor deixando o atributo table o mesmo q está definido em Pessoa. Dessa forma vc pode ter dois objetos Pessoa q se comportam como Aluno e como Professor.

hbm de pessoa

hbm de Aluno

hbm de Professor

tomara q tenha ajudado.

SCJP 1.4