No, non c'è modo di farlo fuori dagli schemi. L'ho aggirato in passato usando il seguente approccio, piuttosto complicato:
- Crea la tua annotazione,
@TableSpecche ha tablespace e altri attributi necessari. - Estendi
org.hibernate.cfg.Configuratione sovrascrivigetTableMappings()restituire ilTabledecorato oggetti (vedi sotto). - Estendi
org.hibernate.mapping.Tablee 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
Configurationoggetto, elabora tutti i tuoi file di classe raccogliendo e interpretando il tuo@TableSpecannotazioni 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.