Oracle
 sql >> Database >  >> RDS >> Oracle

Ibernazione dell'annotazione di Oracle Tablespace

No, non c'è modo di farlo fuori dagli schemi. L'ho aggirato in passato usando il seguente approccio, piuttosto complicato:

  1. Crea la tua annotazione, @TableSpec che ha tablespace e altri attributi necessari.
  2. Estendi org.hibernate.cfg.Configuration e sovrascrivi getTableMappings() restituire il Table decorato oggetti (vedi sotto).
  3. Estendi org.hibernate.mapping.Table e sovrascrivi sqlCreateString() e/o sqlAlterStrings() per aggiungere la specifica del tablespace (e eventuali impostazioni aggiuntive).
  4. Invece di usare lo strumento hbm2ddl (o l'attività ant) ​​scrivi il tuo che creerà la tua Configuration oggetto, elabora tutti i tuoi file di classe raccogliendo e interpretando il tuo @TableSpec annotazioni e invocare Configuration.generateSchemaCreationScript() o generateSchemaUpdateScript() per generare un DDL effettivo.

Come ho detto, piuttosto complicato :-) In alternativa, se TUTTE le tue tabelle mappate utilizzano lo stesso tablespace, puoi estendere il dialetto Oracle che stai usando e sovrascrivere getTableTypeString() per restituire le specifiche del tuo tablespace. Anche se questo è un brutto trucco (perché lo scopo originale di tableTypeString è fornire il tipo di motore MySQL), funziona ed è sicuramente molto più veloce e più semplice dell'approccio precedente.