代码之家  ›  专栏  ›  技术社区  ›  l15a

休眠Oracle表空间注释

  •  6
  • l15a  · 技术社区  · 15 年前

    我正在注释DAO并使用hibernate3:hbm2ddl生成DDL。有没有方法来注释表空间?

    1 回复  |  直到 15 年前
        1
  •  7
  •   ChssPly76    15 年前

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

    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引擎类型),但它确实有效,而且肯定比上面的方法更快更容易。