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!
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<?xml version="1.0" encoding="UTF-8"?>
<!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?
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