Oracle
 sql >> Base de données >  >> RDS >> Oracle

Hibernate Oracle Tablespace Annotation

Non, il n'y a aucun moyen de le faire hors de la boîte. Je l'ai contourné dans le passé en utilisant l'approche suivante - plutôt impliquée :

  1. Créez votre propre annotation, @TableSpec qui a un tablespace et d'autres attributs nécessaires.
  2. Étendre org.hibernate.cfg.Configuration et remplacer getTableMappings() pour retourner la Table décorée objets (voir ci-dessous).
  3. Étendre org.hibernate.mapping.Table et remplacer sqlCreateString() et/ou sqlAlterStrings() pour ajouter une spécification d'espace de table (et des paramètres supplémentaires, le cas échéant).
  4. Au lieu d'utiliser l'outil hbm2ddl (ou la tâche ant), écrivez le vôtre qui créera votre Configuration objet, traitez tous vos fichiers de classe en collectant et en interprétant votre @TableSpec annotations et appelez Configuration.generateSchemaCreationScript() ou generateSchemaUpdateScript() pour générer du DDL réel.

Comme je l'ai dit, plutôt impliqué :-) Comme alternative, si TOUTES vos tables mappées utilisent le même espace de table, vous pouvez étendre le dialecte Oracle que vous utilisez et remplacer getTableTypeString() pour renvoyer la spécification de votre tablespace. Bien qu'il s'agisse d'un vilain hack (parce que l'objectif initial de tableTypeString est de fournir un type de moteur MySQL), cela fonctionne et est certainement beaucoup plus rapide et plus facile que l'approche ci-dessus.