Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Hibernar anotação do Oracle Tablespace


Não, não há como fazer isso fora da caixa. Eu contornei isso no passado usando a seguinte abordagem - bastante envolvida:
  1. Crie sua própria anotação, @TableSpec que tem tablespace e outros atributos necessários.
  2. Estender org.hibernate.cfg.Configuration e substituir getTableMappings() para retornar Table decorada objetos (veja abaixo).
  3. Estender org.hibernate.mapping.Table e substituir sqlCreateString() e/ou sqlAlterStrings() para anexar a especificação do tablespace (e configurações adicionais, se houver).
  4. Em vez de usar a ferramenta hbm2ddl (ou tarefa ant), escreva sua própria que criará sua Configuration objeto, processe todos os seus arquivos de classe coletando e interpretando seu @TableSpec anotações e invoque Configuration.generateSchemaCreationScript() ou generateSchemaUpdateScript() para gerar DDL real.

Como eu disse, bastante envolvido :-) Como alternativa, se TODAS as suas tabelas mapeadas usarem o mesmo tablespace, você poderá estender o dialeto Oracle que está usando e substituir getTableTypeString() para retornar sua especificação de tablespace. Embora este seja um hack feio (porque o objetivo original do tableTypeString é fornecer o tipo de mecanismo MySQL), ele funciona e certamente é muito mais rápido e fácil do que a abordagem acima.