一尘不染

Hibernate Oracle表空间注释

hibernate

我正在注释我的DAO,并使用hibernate3:hbm2ddl生成ddls。有没有办法注释表空间?


阅读 277

收藏
2020-06-20

共1个答案

一尘不染

不,没有开箱即用的方法。过去,我使用以下方法(相当复杂)解决了这个问题:

  1. 创建您自己的注释,@TableSpec该注释具有表空间和其他必要的属性。
  2. 扩展org.hibernate.cfg.Configuration并覆盖getTableMappings()以返回装饰的Table对象(请参见下文)。
  3. 扩展org.hibernate.mapping.Table和覆盖sqlCreateString()和/或sqlAlterStrings()附加表空间规范(以及其他设置,如果有的话)。
  4. 无需使用hbm2ddl工具(或ant任务),而是编写您自己的Configuration对象来创建对象,处理收集和解释@TableSpec注释的所有类文件,然后调用Configuration.generateSchemaCreationScript()generateSchemaUpdateScript()生成实际的DDL。

就像我说的那样,这是相当麻烦的:-)作为替代,如果所有映射表都使用相同的表空间,则可以扩展正在使用的Oracle方言,并重写getTableTypeString()以返回表空间规范。尽管这是一个丑陋的破解(因为tableTypeString的最初目的是提供MySQL引擎类型),但它确实有效,并且比上述方法更快,更容易。

2020-06-20