Domanda

Dopo aver letto Hibernate: hbm2ddl.auto = aggiornamento in produzione? sono sorte alcune domande . Prima di tutto, il motivo per cui sto usando Hibernate è di essere indipendente dal fornitore del database (non è necessario scrivere 10 versioni della query sql "stessa", ad esempio tsql vs. sql).

Il mio problema appare quando è il momento di creare gli schemi del database (ambiente di produzione). Per quanto posso vedere, ho due alternative.

  1. hbm2dll = update
  2. script sql (ddl) puri.

La prima alternativa è ampiamente discussa nel thread sopra. La seconda alternativa è sbagliata perché ciò significa che sono tornato al mio primo problema: "Non voglio creare istruzioni sql che dipendono dal fornitore di database". (Questa affermazione potrebbe essere falsa se " all " (almeno i database Hibernate supportano) stanno implementando il DDL (il sottoinsieme di SQL utilizzato per definire ed esaminare la struttura di un database.) uguale).

È stato utile?

Soluzione

Apporta tutte le modifiche nella modalità di sviluppo / gestione temporanea e trasferisci ed esegui gli script in produzione manualmente (o automaticamente, ma non lasciare che l'ibernazione li esegua). Gli script potrebbero richiedere un po 'di ottimizzazione poiché l'aggiornamento di hbm2ddl non copre tutti i casi.

In effetti non ho mai lasciato ibernare eseguire ddl su nessun database. Uso hbm2ddl per generare testo:

org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=;

org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=;

Altri suggerimenti

Normalmente gli strumenti che scaricano lo schema JPA sono basati sullo strumento SchemaExport , che legge solo i metadati statici.

Esiste un plug-in Maven / Gradle https://github.com/Devskiller/jpa2ddl che genera lo schema JPA. Include tutte le proprietà, le strategie di denominazione, i tipi di utenti, ecc.

Puoi anche usarlo per generare migrazioni automatizzate di schemi per Flyway .

Mi piace Hibernate (MOLTO), e penso che crei un codice di qualità incredibilmente buono, ma non lo lascerei perdere su un database di produzione piuttosto che lasciare una babysitter di orso grizzly molto educata. Tutto può andare benissimo per un po ', ma l'unico incidente in cui va male è DAVVERO cattivo.

Il mio suggerimento sarebbe in un ambiente di test, fare ibernare generare schemi di database. Metti alla prova quelli in un ambiente di prova. Quindi porta quegli script nell'ambiente di produzione ed eseguili. Nota la specificità lì; anche se i test hanno esito positivo, ANCORA non permetterei a Hibernate di scatenarsi sul server di produzione. Prendi l'output di Hibernate schemagen, testalo e una volta convalidato, quindi distribuiscilo sul server di produzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top