Hibernate ou Lógica?

5 respostas
henriquedamota

E ai galera! tudo blz ?

To com um problema aqui no Hibernate…

Acho q da pra eu explicar ele sem colocar mto código aqui… seguinte…

Tenho uma classe abstrata chamada ATRIBUTO que contem os atributos NOME e VALOR e o método Timer, que é abstrato.

Tenho tambem uma séria de classes que eu extendo ATRIBUTO e implemento o método Timer. Por exemplo a classe NUTRIENTES.

Populo um objeto nutrientes NUTRIENTES nutrientes = new NUTRIENTES(); e tento persistir por um DAO generico. Um DAO, onde o q está mapeado pro hibernate o ATRIBUTO.hbm.xml

E finalmente é gerado um erro…

Num to com o prinstack da exceção aqui… mas alguem ja conseguiu fazer isso ?

Ou a lógica ta totalmente errada !?

Abraços ai !

Obrigado pela ajuda !!! :wink:

5 Respostas

ddduran

Poxa sem o erro realmente fica dificil.

mas ja conseguiu fazer o que? persistir um objeto passando por um DAO generico que usa hibernate? se for essa a pergunta, sim.

em todo caso, pode ser traumatizante vc mapear essa herança. não dava pra implementar usando composição?

L

Me parece que você deveria ter um mapeamento para Nutrientes e usar a classe nutrientes…

henriquedamota

Mais tarde vou postar o erro que acontece…

Então o ruim é que eu tenho muitos muitos atributos, assim como Nutrientes…

Mas em todo caso pra funcionar com ctz vou ter q mapear um a um…

Alguma sugestão mais ai ?

abraços ! 8)

henriquedamota

Resolvido usando a tag

ai consegui mapear a herança.

segue abaixo o exemplo.

<?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 package="br.unicamp.gene.persistence.vo">

    <class name="Atributo" table="GENE_ATRIBUTO" dynamic-insert="true"  discriminator-value="0">
        <id name="id" column="ATRIBUTO_ID">
            <generator class="native"/>
        </id>

	 	<!-- Coluna Discriminante -->
        <discriminator column="ATRIBUTO_TIPO" type="int"/>


        <property name="nome" column="ATRIBUTO_NOME"/>
        <property name="valor" column="ATRIBUTO_VALOR"/>

  	  

	   <!-- Subclasse Agua -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Agua" discriminator-value="1"/>
         
       <!-- Subclasse Banho -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Banho" discriminator-value="2"/>

	   <!-- Subclasse Calorias -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Calorias" discriminator-value="3"/>

	   <!-- Subclasse Endereco -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Endereco" discriminator-value="4"/>

	   <!-- Subclasse Felicidade -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Felicidade" discriminator-value="5"/>
         
       <!-- Subclasse Humor -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Humor" discriminator-value="6"/>

	   <!-- Subclasse Idade -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Idade" discriminator-value="7"/>

	   <!-- Subclasse Nutrientes -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Nutrientes" discriminator-value="8"/>

	   <!-- Subclasse Peso -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Peso" discriminator-value="9"/>

	   <!-- Subclasse Saude -->
       <subclass name="br.unicamp.gene.persistence.vo.atributes.Saude" discriminator-value="10"/>

 	   <many-to-one name="bicho" column="BICHO_ID" 
 	   		class="br.unicamp.gene.persistence.vo.Bicho"/>

        
    </class>

</hibernate-mapping>

Valeu !

davidpaniz

Você precisa mapear a classe filha e usar Inheritance no mapeamento do hibernate. Agora vai ser meio dificil de te mostrar, mas o caminho está por aqui… Da uma procurada no google sobre mapeamento com herança que você deve achar a resposta fácil…

Criado 7 de maio de 2008
Ultima resposta 14 de mai. de 2008
Respostas 5
Participantes 4