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 :
- Créez votre propre annotation,
@TableSpec
qui a un tablespace et d'autres attributs nécessaires. - Étendre
org.hibernate.cfg.Configuration
et remplacergetTableMappings()
pour retourner laTable
décorée objets (voir ci-dessous). - Étendre
org.hibernate.mapping.Table
et remplacersqlCreateString()
et/ousqlAlterStrings()
pour ajouter une spécification d'espace de table (et des paramètres supplémentaires, le cas échéant). - 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 appelezConfiguration.generateSchemaCreationScript()
ougenerateSchemaUpdateScript()
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.