2013-04-12 11 views
17

Próbuję zaktualizować istniejącą tabelę za pomocą hbm2ddl.auto = update.

Istnieje kilka kolumn w kilku tabelach, w których definicje kolumn bazy danych zmieniają się z deklaracji w jednostkach. JakHibernate hbm2ddl.auto = aktualizacja nie aktualizuje definicji kolumn w MySQL

@Column(name="mycolumn", nullable=false, length=10) 
private Long mycolumn; 

i

'mycolumn' bigint (20) not null domyślne 0

w MySQL.

Dlaczego hbm2ddl nie aktualizuje takich rzeczy? I czy można wymusić taką aktualizację? Chcę powiedzieć hbm2ddl, aby usunąć domyślną wartość kolumny i zmienić długość typu.

Odpowiedz

32

hibernate.hbm2ddl.auto" value="update nie będzie modyfikować istniejących definicji kolumn tabeli. Wykonując niektóre testy stwierdziłem, że:

hibernate.hbm2ddl.auto" value="update doda kolumnę db, która jeszcze nie istnieje.

hibernate.hbm2ddl.auto" value="update nie usunie kolumny db usuniętej/nie będzie już w twojej encji.

hibernate.hbm2ddl.auto" value="update nie zmodyfikuje kolumny, która została już utworzona.

Musisz wykonać kopię zapasową danych tabeli, upuść ją i ponownie uruchomić aplikację, aby schemat tabeli ponownie zsynchronizował się z twoją encją. Następnie przeładuj swoje dane.

Patrz:
Need clarity on hibernate.hbm2ddl.auto=update

i
Hibernate hbm2ddl.auto possible values and what they do?