Hibernate 3.0 - Mapeamento de Associações

0 respostas
rfigueiredo0622

Bom dia, pessoal!!
Estou tendo um grande problema com update e delete numa classe associativa em Hibernate.
Tenho as seguintes tabelas(Com os nomes diferentes dos reais pois não posso divulgar os reais):

Tabela1                     
idTab1                       
nomeTab1                 
                                

Tab1Tab2
idTab1Tab2
idTab1
idTab2

Tabela2
idTab2
nomeTab2

Meus mapeamentos estão da seguinte formas:

  • mapeamento para a Tabela1:
<hibernate-mapping>

   <class name="br.com.Tabela1" table="Tabela1">
                <id name="idTab1" column="idTab1" type="long">
			<generator class="sequence"> 
<param name="sequence">BD.SQ_ID_TAB1 </param>
		      		</generator>
                </id>
                <property  name="nomeTab1" column=" nomeTab1" type="string"/>

        
        	 
	<bag name="listatab1Tab2" table="Tab1Tab2" inverse="false"    cascade=?all?>
		<key column=" idTab1"/>
		<one-to-many class="br.com.Tab1Tab2"/>
	</bag>
			
        </class>
</hibernate-mapping>
  • mapeamento para a Tabela2:
<hibernate-mapping>
       <class name="br.com.Tabela2" table="Tabela2">
         <id name="idTab2" column="idTab2" type="long">
		<generator class="sequence">
		    <param name="sequence">BD.SQ_ID_TAB2</param>
		 </generator>
          </id>
        <property name="nomeTab2" column=" nomeTab2" type="string"/>
        </class>
</hibernate-mapping>

-mapeamento para Tab1Tab2:

<hibernate-mapping>

       <class name="br.com.Tab1Tab2" table="Tab1Tab2">
                <id name="idTab1Tab2" column="idTab1Tab2" type="long">
					<generator class="sequence"> 
		        		<param name="sequence">BD.SQ_ID_TAB1TAB2</param>
		      		</generator>
                </id>
       
                <many-to-one name="tabela1" 
         			  class="br.com.Tabela1" 
    				  column="idTab1"
            	 />
        
               <many-to-one name="tabela2" 
         			  class="br.com.Tabela2" 
    				  column="idTab2"
            	 />

        </class>
</hibernate-mapping>
  • os beans estão da seguinte maneira:

    • Tabela1
private long   idTab1;
	private String nomeTab1;	
	private List<Tabela2> tabela2;//one-to-many
	//gets e sets

-Tabela2

private long idTab2;
	private String nomeTab2;
	//gets e sets

-Tab1Tab2

private long idTab1Tab2;
	private Tabela1 tabela1;//many-to-one
	private Tabela2 tabela2;//many-to-one
	//gets e sets

Agora vem o problema que estou tendo:

  • Infelizmente o cliente quer que na classe associativa tenha uma chave primária e as chaves estrangeiras das outras 2 tabelas. Já bateu o martelo e disse que isso não pode ser alterado, ou seja, todas as classes associativas terão chaves primárias além das chaves estrangeiras. Digo infelizmente pois não encontro nenhum exemplo assim como o meu caso. Só encontro exemplos com chaves compostas;

  • com esses mapeamentos consigo incluir na Tabela1 e automaticamente ele inclui na Tab1Tab2;

  • a consulta retorna as informações das tabelas normalmente;

  • mas não estou conseguindo alterar nem excluir. O que está acontecendo é que o
    hibernate está tentando incluir na tabela associativa sem antes excluir os registros que existem lá para as chaves estrangeiras que to passando, mas especificamente a chave da Tabela1 que é a mandatória.

  • já tentei colocar todos os tipos de cascade possíveis e nada funcionou.

Alguém tem alguma idéia do que devo fazer?

Agradeço desde já.
Rodrigo.

Criado 9 de julho de 2008
Respostas 0
Participantes 1