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,
@TableSpecqui a un tablespace et d'autres attributs nécessaires. - Étendre
org.hibernate.cfg.Configurationet remplacergetTableMappings()pour retourner laTabledécorée objets (voir ci-dessous). - Étendre
org.hibernate.mapping.Tableet 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
Configurationobjet, traitez tous vos fichiers de classe en collectant et en interprétant votre@TableSpecannotations 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.