(Hibernate + Seam) Violação de Constraint no update

6 respostas
yasudevil

Oi Pessoal,

Estou com um problema de violação de constraint na minha aplicação. Estou usando atualmente Seam + Hibernate.

O meu cenário é mais ou menos o seguinte.

Tenho uma tabela Carro e outra CarroGrupo, por algum motivo que não posso explicar, essas duas tabelas possuem uma relação Muitos para Muitos o que provoca o aparecimento de uma terceira chamada CarroGrupoCarro.

Nas 3 tabelas (Carro, CarroGrupo e CarroGrupoCarro) existe a coluna tipo , e uma Constraint que garante que se houver uma relacionamento entre elas que o tipo seja igual em todas.

Meu problema ocorre quando estou editanto CarroGrupo para adicionar novos itens ao grupo. O usuário pode mudar o tipo de CarroGrupo, assim a lista de carros muda e trás só Carros do tipo recém trocado.

Mas como as propriedades da tela são mapeadas diretamente com a Entity CarroGrupo que está Managed (graças ao escopo de conversação do Seam), ele tenta primeiro dar update em CarroGrupo, pois mudei o tipo, para depois remover os dados em CarroGrupoCarro.

Por causa da minha bendita constraint eu ganho uma exception na cara.

Há alguma maneira que eu consiga primeiro remover os relacionamento em CarroGrupoCarro para depois fazer o update em CarroGrupo?

Eu andei pesquisando mas não achei nada. Seria o caso de colocar um @prePersist ou algo do tipo?

6 Respostas

S

Olá meu amigo.

Qual SGBD vc está usando em sua aplicação?

yasudevil

Estou usando o SQL Server.

Mais uma informação eu não tenho as constraints configuradas no meu mapeamento.

Estou tentando mapea-las agora para ver se altera o funcionamento.

S

Seguinte.

Eu tive um problema parecido como, já que não existe uma maneira de mapear essas constraint pelo Bean que gerencia a tabela no banco de dados (Entity Bean). Então resolvi da seguinte maneira:

Fui até a tabela gerada pelo Hibernate que configura o relacionamento entre duas entidade em propiedades dessa tabela, apaguei a UNIQUE CONSTRAINT e atualizei o banco. Em seguida vc para o Application Server e reinicia a sua IDE (se estiver usando eclipse - Restart). Limpe a pasta temporária do seu Application Server e start ele novamente.

Mande-me um feedback caso tenha dado certo.

Sds

yasudevil

Putz,

Estava na esperança de encontrar alguma solução que não precisasse remover a constraint da base de dados.

Na realidade eu não tenho autonomia para remover essas coisas da Base só o DBA tem, posso tentar convencer ele mas já viu né vou ter que explicar um monte de coisas e daí…

De qualquer maneira vou tentar pedir pra remover só para eu fazer um teste.

S

Isso é verdade.

O que vc pode fazer tb é o seguinte; tente rever o teu relacionamento para que ele não gere essa tabela intermediária, ou peça para o DBA excluí-la para vc fazer o teste mesmo. Fica uma dica ai pra vc amigo, ao invés de vc pedir para o DBA excluir a constraint, baixe o SQL Server EE e teste na sua própia máquina, ai vc terá maior embasamento para discutir com o administrador do banco, na próxima desenvolva os seus projetos com a toda a infra necessária para o mesmo. Para baixar o jar acesse http://www.microsoft.com/downloads/details.aspx?familyid=e22bc83b-32ff-4474-a44a-22b6ae2c4e17&displaylang=en e instale no seu projeto.

Estamos ai pra ajudar qualquer coisa

Um abraço

yasudevil

Pois é… é um problema esse tipo de coisa.

Bom… valeu vou ver se eu resolvo removendo a constraint.

Criado 22 de janeiro de 2010
Ultima resposta 22 de jan. de 2010
Respostas 6
Participantes 2