Olá pessoal,
Tenho que entregar um projeto da facul daqui poucos dias, então me ajudem rápido por favor =)
O projeto é um sistema que irá permitir que o usuário monte um carro escolhendo o modelo, quais kits e acessórios o carro vai ter, etc. Um kit pode ter diversos acessórios. Quando o cliente monta o carro do jeito que ele quer a configuração que ele escolheu é gravada na tabela configuracao.
Portanto a tabela kit tem uma chave primária e a chave estrangeira fica na tabela de configuracao_kit. O relacionamento é muitos para muitos, um kit pode estar presente em muitas configurações e uma configuração pode ter muitos kits.
Bom, tenho que listar todos kits em uma jsp sendo que cada kit é representado por um checkbox. Na hora de gravar o kit ao invés de apenas dar um insert em configuracao_kit o hibernate está fazendo coisas a mais como dar um update na tabela kit e um delete na tabela kit_acessorio:
Hibernate: insert into configuracao (FK_cliente, FK_veiculo) values (?, ?) //AQUI OK, ASSOCIOU UM CLIENTE E UM VEÍCULO A ESSA CONFIGURAÇÃO
Hibernate: update kit set descricao=?, kit=?, preco=? where PK_id_kit=?
Hibernate: delete from kit_acessorio where FK_kit=?
Hibernate: insert into configuracao_kit (FK_configuracao, FK_kit) values (?, ?)
Antes de gravar a configuração as tabelas estavam assim:
mysql> select * from kit;
±----------±-----------±------±-------+
| PK_id_kit | descricao | kit | preco |
±----------±-----------±------±-------+
| 1 | kit 1 desc | kit 1 | 500.00 |
| 2 | kit 2 desc | kit 2 | 500.00 |
±----------±-----------±------±-------+
2 rows in set (0.00 sec)
mysql> select * from configuracao;
±-------------------±-----------±-----------+
| PK_id_configuracao | FK_cliente | FK_veiculo |
±-------------------±-----------±-----------+
| 1 | NULL | 1 |
| 2 | NULL | 2 |
| 3 | NULL | 1 |
| 4 | NULL | 2 |
| 5 | NULL | 2 |
| 6 | NULL | 2 |
±-------------------±-----------±-----------+
6 rows in set (0.00 sec)
mysql> select * from configuracao_kit;
±----------------±-------+
| FK_configuracao | FK_kit |
±----------------±-------+
| 4 | 1 |
| 6 | 1 |
| 6 | 2 |
±----------------±-------+
3 rows in set (0.00 sec)
Depois de gravar a configuração ficaram assim as tabelas:
mysql> select * from kit;
±----------±-----------±------±-------+
| PK_id_kit | descricao | kit | preco |
±----------±-----------±------±-------+
| 1 | NULL | NULL | NULL |
| 2 | kit 2 desc | kit 2 | 500.00 |
±----------±-----------±------±-------+
2 rows in set (0.00 sec)
mysql> select * from configuracao;
±-------------------±-----------±-----------+
| PK_id_configuracao | FK_cliente | FK_veiculo |
±-------------------±-----------±-----------+
| 1 | NULL | 1 |
| 2 | NULL | 2 |
| 3 | NULL | 1 |
| 4 | NULL | 2 |
| 5 | NULL | 2 |
| 6 | NULL | 2 |
| 7 | NULL | 2 |
±-------------------±-----------±-----------+
7 rows in set (0.00 sec)
mysql> select * from configuracao_kit;
±----------------±-------+
| FK_configuracao | FK_kit |
±----------------±-------+
| 4 | 1 |
| 6 | 1 |
| 6 | 2 |
| 7 | 1 |
±----------------±-------+
4 rows in set (0.00 sec)
Vejam que o Hibernate criou e salvou a configuração de id 7 na tabela configuracao, criou a associação da configuração 7 com o kit 1 na tabela configuracao_kit, porém ele também deu um update setando tudo como NULL na tabela kit que é o que eu não queria.