2009-05-07 10 views
5

Dopo aver letto Hibernate: hbm2ddl.auto=update in production? alcune domande sono sorte. Prima di tutto, il motivo per cui utilizzo Hibernate è quello di essere indipendente dal fornitore di database (non è necessario scrivere 10 versioni della query sql "stessa", ad esempio tsql vs. sql).Come creare lo schema del database utilizzando Hibernate

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

  1. hbm2dll = aggiornamento
  2. puro SQL (DDL) script.

La prima alternativa è ampiamente discussa nella discussione precedente. La seconda alternativa è negativa perché significa che sono tornato al mio primo problema: "Non voglio creare istruzioni SQL dipendenti dal produttore del database". (Questa affermazione potrebbe essere falsa se "tutti" (atlast il database Hibernate support) sta implementando il DDL (il sottoinsieme di SQL utilizzato per definire ed esaminare la struttura di un database.) Uguale).

risposta

5

fare tutti i cambiamenti nella modalità di sviluppo/messa in scena e il trasferimento ed eseguire manualmente gli script in produzione (o in modo automatico, ma non lasciare hibernate li gestiscono). Gli script potrebbero richiedere un po 'di tunning poiché l'aggiornamento di hbm2ddl non copre tutti i casi.

In effetti non ho mai lasciato ibernare eseguire ddl contro qualsiasi database. Io uso hbm2ddl per generare il 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=; 
+0

Mi picchiate al punch. Completamente d'accordo. –

1

mi piace Hibernate (molto), e penso che abbia un po 'di codice incredibilmente buona qualità, ma io non appena sarei accenderlo sciolto in un database di produzione di quanto mi lascio una babysitter da orso grizzly molto educato. Tutto può andare benissimo per un po ', ma l'incidente in cui va male è REALE male.

Il mio suggerimento sarebbe in un ambiente di test, avere ibernato generare schemi di database. Metti alla prova quelli in un ambiente di test. Quindi portare questi script nell'ambiente di produzione ed eseguirli. Nota la specificità lì; anche se i test riescono in modo fantastico, ANCORA non permetterei semplicemente che Hibernate si scateni sul server di produzione. Prendi l'output di Hibernate schemagen, testalo e una volta convalidato, quindi distribuilo sul server di produzione.

+1

Non stai cercando di essere in contraddittorio qui, ma hai letto la mia domanda? – Schildmeijer

+0

ho fatto; c'è un modo specifico in cui la mia risposta indica una incomprensione della tua domanda? –

+0

La prima frase nella tua risposta. – Schildmeijer

3

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

C'è un plugin Maven/Gradle https://github.com/Devskiller/jpa2ddl che genera lo schema JPA. In include tutte le proprietà, le strategie di denominazione, i tipi di utente, ecc.

È anche possibile utilizzarlo per generare migrazioni di schemi automatizzate per Flyway.

Problemi correlati