[Resolvido] JPA como adicionar novo campo?

Olá, pessoal.

Estou com uma seguinte dúvida:

tenho uma classe mapeada:

@Entity
public class Cidade {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="descricao", length=100)
    @Basic
    private String nomeCidade;

Até aqui, está tudo ok.

Mas o que acontece quando eu crio um novo campo nessa entidade? Meu banco de dados já estava gravado os dois campos anotados anteriormente…

Qual é a estratégia nesse caso? Eu não posso dropar a tabela para recriar novamente com o novo campo…

Existe alguma anotação que permita ao JPA saber que é para incluir apenas os campos novos existentes na anotação para o meu banco de dados?

Você pode adicionar esta propriedade no seu persistence.xml

Ele irá ser responsável por atualizar o seu banco de dados, sem que você perca os dados existentes.

Abs.

Uma coisa que você tem que se preocupar é se o novo campo é not null, caso seja você deverá colocar um valor default para ele… de resto você pode fazer igual o @c.rangel falou que já atualizara o banco.

1 curtida

Só que nesse caso, você está utilizando Hibernate, correto? E no caso do Eclipselink?

Acredito, que para o EclipseLink essa propriedade deverá funcionar.

<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />, conforme http://stackoverflow.com/questions/2945714/eclipselink-update-existing-tables

1 curtida

Outras propriedades úteis para quem utiliza EclipseLink:

https://eclipse.org/eclipselink/documentation/2.5/jpa/extensions/p_ddl_generation.htm

1 curtida

ai vc olha a documentação da sua implementação e ve, correto ?