Pessoal,
Possuo a estrutura de classes :
|Negocio| 1 _______ * |AtivoFinanceiro|
sendo a classe AtivoFinanceiro uma classe abstrata tendo como subclasses:
Acao
Opcao
Termo
Fiz um mapeamento no Hibernate de uma tabela por subclasse:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="br.com.rafael.gestorinvestimentos.model.Negocio" table="negocio">
<id name="id" column="idNegocio" type="integer">
<generator class="increment"></generator>
</id>
<property name="ordem" column="ordem" type="int" not-null="true"></property>
<property name="tipo" column="tipo" type="string" not-null="true"></property>
<property name="quantidade" column="quantidade" type="int" not-null="true"></property>
<property name="preco" column="preco" type="double" not-null="true"></property>
<property name="negociacao" column="negociacao" type="string" not-null="true"></property>
<property name="tipoMercado" column="tipoMercado" type="string" not-null="true"></property>
<property name="valorNegocio" column="valorNegocio" type="double" not-null="true"></property>
<many-to-one name="operacao" column="idOperacao" update="true" insert="true" not-null="true"></many-to-one>
<many-to-one name="ativoFinanceiro" column="idAtivoFinanceiro" update="true" insert="true" not-null="false"></many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="br.com.rafael.gestorinvestimentos.model.AtivoFinanceiro" table="ativo_financeiro">
<id name="id" column="idAtivoFinanceiro" type="integer">
<generator class="increment"></generator>
</id>
<property name="ticker" column="ticker" type="string" not-null="true" unique="true"></property>
<property name="nome" column="nome" type="string" not-null="true" unique="true"></property>
<joined-subclass name="br.com.rafael.gestorinvestimentos.model.Acao" table="acao">
<key column="idAcao"> </key>
</joined-subclass>
<joined-subclass name="br.com.rafael.gestorinvestimentos.model.Opcao" table="opcao">
<key column="idOpcao"> </key>
<property name="dataVencimento" column="dataVencimento" type="date" not-null="true" unique="false"></property>
<property name="strike" column="strike" type="double" not-null="true" unique="false"></property>
<property name="tipo" column="tipo" type="string" not-null="true" unique="false"></property>
<many-to-one name="acao" column="idAcao" not-null="true"></many-to-one>
</joined-subclass>
<joined-subclass name="br.com.rafael.gestorinvestimentos.model.Termo" table="termo">
<key column="idTermo"> </key>
<property name="prazo" column="prazo" type="int" not-null="true" unique="false"></property>
<many-to-one name="acao" column="idAcao" not-null="true"></many-to-one>
</joined-subclass>
</class>
</hibernate-mapping>
O problema ocorre quando eu busco um objeto negócio e tento identificar a que tipo de AtivoFinanceiro ele se refere. O código abaixo por exemplo não imprime nada:
Iterator iterator = negocios.iterator();
while(iterator.hasNext()){
Negocio n = (Negocio) iterator.next();
System.out.println("Negócio: " + n.getId());
AtivoFinanceiro ativo = n.getAtivoFinanceiro();
if(ativo instanceof Acao){
Acao acao = (Acao) ativo;
System.out.println(ativo.getNome());
}
if(ativo instanceof Opcao){
Opcao opcao = (Opcao) ativo;
System.out.println(opcao.getNome() + " " + opcao.getStrike());
}
if(ativo instanceof Termo){
Termo termo = (Termo) ativo;
System.out.println(termo.getNome() + " " + termo.getPrazo());
}
}
Alguém tem uma idéia do que pode estar acontecendo?