不,没有开箱即用的方法。过去,我使用以下方法(相当复杂)解决了这个问题:
- 创建您自己的注释,
@TableSpec
该注释具有表空间和其他必要的属性。 - 扩展
org.hibernate.cfg.Configuration
并覆盖getTableMappings()
以返回装饰的Table
对象(请参见下文)。 - 扩展
org.hibernate.mapping.Table
和覆盖sqlCreateString()
和/或sqlAlterStrings()
附加表空间规范(以及其他设置,如果有的话)。 - 无需使用hbm2ddl工具(或ant任务),而是编写您自己的
Configuration
对象来创建对象,处理收集和解释@TableSpec
注释的所有类文件,然后调用Configuration.generateSchemaCreationscript()
或generateSchemaUpdatescript()
生成实际的DDL。
就像我说的那样,这是相当麻烦的:-)作为替代,如果所有映射表都使用相同的表空间,则可以扩展正在使用的Oracle方言,并重写
getTableTypeString()以返回表空间规范。尽管这是一个丑陋的破解(因为tableTypeString的最初目的是提供MySQL引擎类型),但它确实有效,并且比上述方法更快,更容易。



