2010-01-22 2 views
10

Come verificare che la configurazione del mapping di Hibernate corrisponda al database? Mi piacerebbe sapere se sto usando la versione errata del mapping di ibernazione prima di iniziare l'esecuzione di aggiornamenti e query, che poi fallirebbero.Come convalidare il mapping di Hibernate con il database

Ho un sacco di classi che sono state mappate con le annotazioni di Hibernate. Ho anche la connessione al database corrispondente. Ora vorrei verificare se la mappatura Hibernate corrisponde al database.

Vorrei controllare almeno le seguenti cose:

  • tutte le tabelle mappate in configurazione Hibernate avere oggetto corrispondente nel database (es tabella o vista)
  • tutti i campi mappati esiste nel database
  • tutti i campi mappati hanno i tipi corretti

Preferirei non dover eseguire query su tabelle mappate, preferibilmente il controllo è basato esclusivamente sui metadati del database.

risposta

14

Da Hibernate configuration docs:

hibernate.hbm2ddl.auto

convalida automaticamente o esportazioni schema DDL al database quando viene creata la SessionFactory. Con create-drop, lo schema del database verrà eliminato quando SessionFactory viene chiuso esplicitamente.

ad es. convalidare | aggiornamento | creare | create-drop

Quindi, è possibile impostarlo su validate e verificherà se tutti i mapping di ibernazione sono presenti nel database. Se lo si imposta su update, ogni volta che si aggiunge una classe o una proprietà mappata, lo schema di database sottostante verrà aggiornato per riflettere tale modifica.

Hai anche uno strumento da riga di comando - SchemaUpdate

+0

Qualcosa del genere che io sto cercando. Ma c'è qualcosa in API che potrei eseguire in modo programmatico? –

+1

È possibile eseguirlo a livello di programmazione. Scrivi un piccolo programma che crei un SessionFactory con "validate" attivato. – duffymo

+0

sì, c'è uno strumento da riga di comando - l'ho aggiunto alla mia risposta. O preferisci fare ciò che suggeriva Duffymo. – Bozho