No, non c'è modo di farlo fuori dagli schemi. L'ho aggirato in passato usando il seguente approccio, piuttosto complicato:
- Crea la tua annotazione,
@TableSpec
che ha tablespace e altri attributi necessari. - Estendi
org.hibernate.cfg.Configuration
e sovrascrivigetTableMappings()
restituire ilTable
decorato oggetti (vedi sotto). - Estendi
org.hibernate.mapping.Table
e sovrascrivisqlCreateString()
e/osqlAlterStrings()
per aggiungere la specifica del tablespace (e eventuali impostazioni aggiuntive). - 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 invocareConfiguration.generateSchemaCreationScript()
ogenerateSchemaUpdateScript()
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.