2010-04-23 10 views
10

Sono interessato a come hibernate.hbm2ddl.auto = convalida in realtà funzioni e sto faticando a trovare una documentazione completa.Hibernate - hibernate.hbm2ddl.auto = validate

sistema di produzione recente, abbiamo scoperto è stata colpita da http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 (Hibernate corrisponde chiavi esterne su nome, piuttosto che la firma e così li ricreare per voi) e hibernate.hbm2ddl.auto = aggiornamento viene rimosso dalla nostra prossima release.

Sarei abbastanza felice di sbarazzarmi di hibernate.hbm2ddl.auto e gestire il nostro database da soli. Tuttavia, non tutti i miei colleghi condividono questa visione del mondo e alcuni sono desiderosi di aggiungere nuovamente hibernate.hbm2ddl.auto = validate.

Sono preoccupato che questo colpirà lo stesso problema e sono interessato a trovare più documentazione su come questa validazione funzioni effettivamente. La documentazione della comunità di Hibernate (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html) fa semplicemente riferimento ai valori.

Qualcuno ha dei buoni indicatori di documentazione o qualsiasi esperienza di utilizzo di validate in un sistema di produzione?

risposta

17

Sono preoccupato che questo colpirà lo stesso problema e sono interessato a trovare più documentazione su come funziona effettivamente questa convalida.

A mio parere, la migliore documentazione è il codice sorgente che è possibile controllare per vedere cosa sta accadendo esattamente. Il metodo rilevante è org.hibernate.tool.hbm2ddl.SchemaValidator#validate().

sono andato rapidamente attraverso il codice e mi non credo che il SchemaValidator verifica chiavi esterne nel database: controlla la presenza di tabelle, colonne, generatori id ma chiavi non stranieri. Un test contro un database animale sembra confermare questo comportamento: l'eliminazione di un vincolo FK non interrompe la convalida dello schema (in altre parole, il validatore controlla se l'applicazione può essere eseguita, non per l'integrità referenziale).

Ora, HHH-3532 essere contrassegnati come fisso, perché non si esegue l'aggiornamento a una nuova versione di Hibernate o, se cambiare la versione di Hibernate è troppo pesante, perché non si applica la patch per HHH-3532 te stesso?

Detto questo, I non utilizzare hibernate.hbm2ddl.auto=update per aggiornare i database di produzione, utilizzo gli script di modifica. Ma I uso hibernate.hbm2ddl.auto=validate e sono soddisfatto.

+0

Grazie Pascal. Non sono il responsabile dei sistemi di produzione e, beh, non sono convinto che mi basterebbero i test di regressione per rendermi felice di cambiare versione! Guardando attraverso la cronologia del controllo delle modifiche l'altro giorno ho notato che era stato originariamente impostato come valido e qualcuno lo aveva aggiornato a 'udpate'. Detto questo, penso che sia più sicuro rimuoverlo - si spera che qualcuno abbia meno probabilità di aggiungere un'intera linea piuttosto che modificare un valore in futuro! – azp74