【问题标题】:Hibernate: DDL<-> Classes, which direction?Hibernate:DDL<-> 类,哪个方向?
【发布时间】:2011-12-14 14:30:54
【问题描述】:

您认为使用 Hibernate 的“正确”方式是什么?在对象级别(类)设计模型,然后从中生成 DDL?在关系级别(表)设计模型,然后从中生成类?

每种方法的优缺点是什么?

在首先创建 DDL 的情况下,您从中生成类,然后您可以在类中添加一些代码,例如,当您想向表中添加新列时会发生什么,您必须修改分别上课。手动? Hibernate 是否提供了修改类而不完全重新生成类(删除自定义代码)的工具?

谢谢

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我更喜欢以下方法:

    • 在项目的早期阶段,您设计类并从中生成 DDL,以便您可以根据需要轻松更改域模型。

      但是,在设计域模型时,您仍然需要牢记数据库架构,以避免创建会导致数据库访问效率低下的模型。

    • 随着项目的发展和领域模型变得更加稳定,您可以开始将数据库模式作为一个单独的工件来维护。它简化了索引和约束的微调。

      在这个阶段,您需要手动使架构与域模型保持同步,但无论如何都需要这样做,因为 Hibernate 提供的自动 DDL 更新对于在生产中使用来说不够可靠,因此您需要跟踪您的更改并为他们编写迁移脚本。

    【讨论】:

    • +1。如果您知道 Hibernate 是如何工作的,那么设计实体或设计表无论如何都或多或少是一回事,并且您永远不应忘记您的对象必须以某种方式映射到表,并且查询必须高效。
    【解决方案2】:

    我会先生成域类,然后使用 Hibernate 创建 DDL。

    这是因为这允许您指定表之间的关联(ManyToOne 等),这将导致创建适当的外键。您还可以使用注释来指定将反映在生成的 DDL 中的唯一索引。

    但是,一旦您的项目稳定了,您就不应在更改域类后使用休眠来升级架构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多