2013-04-12 8 views
17

Sto tentando di aggiornare la tabella esistente con hbm2ddl.auto = aggiornamento.

Ci sono diverse colonne in diverse tabelle in cui le definizioni delle colonne del database cambiano dalla dichiarazione nelle entità. ComeHibernate hbm2ddl.auto = aggiornamento non aggiorna le definizioni di colonna in MySQL

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

e

'MyColumn' bigint (20) non nullo di default 0

in MySQL.

Perché hbm2ddl non aggiorna queste cose? Ed è possibile forzare tale aggiornamento? Voglio dire hbm2ddl per rimuovere il valore predefinito della colonna e cambiare la lunghezza del tipo.

risposta

32

hibernate.hbm2ddl.auto" value="update non modifica le definizioni di colonna della tabella esistente. Facendo alcuni test ho scoperto che:

hibernate.hbm2ddl.auto" value="update aggiungerà una colonna db che non esiste già.

hibernate.hbm2ddl.auto" value="update non eliminerà una colonna db rimossa/non più nell'entità.

hibernate.hbm2ddl.auto" value="update non modificherà una colonna db che è già stata creata.

È necessario eseguire il backup dei dati della tabella, rilasciarlo e riavviare l'applicazione per ripristinare lo schema di quella tabella in sincronia con la propria entità. Quindi ricarica i tuoi dati.

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

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