sql >> Base de Datos >  >> RDS >> Oracle

Anotación de espacio de tabla de Oracle de Hibernate

No, no hay manera de hacerlo fuera de la caja. Lo solucioné en el pasado usando el siguiente enfoque, bastante complicado:

  1. Cree su propia anotación, @TableSpec que tiene tablespace y otros atributos necesarios.
  2. Extender org.hibernate.cfg.Configuration y anular getTableMappings() para devolver la Table decorada objetos (ver más abajo).
  3. Extender org.hibernate.mapping.Table y anular sqlCreateString() y/o sqlAlterStrings() para agregar la especificación del espacio de tablas (y configuraciones adicionales, si las hay).
  4. En lugar de usar la herramienta hbm2ddl (o la tarea ant), escriba la suya propia que creará su Configuration objeto, procese todos sus archivos de clase recopilando e interpretando su @TableSpec anotaciones e invoque Configuration.generateSchemaCreationScript() o generateSchemaUpdateScript() para generar DDL real.

Como dije, bastante complicado :-) Como alternativa, si TODAS sus tablas mapeadas usan el mismo espacio de tablas, puede extender el dialecto de Oracle que está usando y anular getTableTypeString() para devolver su especificación de tablespace. Si bien este es un truco feo (porque el propósito original de tableTypeString es proporcionar un tipo de motor MySQL), funciona y ciertamente es mucho más rápido y más fácil que el enfoque anterior.