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.