Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida no relacionamento @OneToOne

O relacionamento @OneToOne precisa trabalhar em conjunto com o @JoinColumn(unique=true). O professor comentou que é preciso recriar o banco caso o @JoinColumn tenha sido adicionado posteriomente...

Pensando no dia-a-dia, imagine a situação em que é preciso adicionar essa restrição depois que a aplicação já está em produção, nesse caso não posso recriar o banco ou recriar a tabela.

Qual seria a melhor maneira de lidar com isso? Seria adicionando a restrição no JPA e depois manualmente ir no banco de produção e rodar o script que faz o alter da restrição na tabela?

Grato.

2 respostas
solução!

Oi Fernando, tudo bom?

Realmente, em uma aplicação em produção a gente não pode dropar a base sempre que o modelo mudar.

Normalmente, para essas mudanças mais complexas é necessario manter um backup (mais do que nunca) e acompanhar a transição do banco mais de perto.

Esse tipo de mudança acontece em outra camada. A especificação não tem como cobrir esses casos.

Pra isso existem algumas ferramentas especificas pra banco mesmo como o flyway. E mesmo assim é necessario conhecimento em SQL, etc... Não tem muito como fugir =)

Bom tópico levantado!

Qualquer duvida é só falar.

Abraço e bons estudos.

E aí Fernando blz?

O @JoinColumn só tem relevância ou funciona na criação da tabela. Se a tabela já existe colocar ele não muda nada a não ser que se use o parâmetro "hibernate.hbm2ddl.auto" como "create" do persistence.xml o que é totalmente desaconselhável em produção. Nesse caso criar um índice unique na tabela é a forma de garantir essa unicidade da informação em uma tabela já existente.

Espero ter ajudado,