【问题标题】:Think in database or Hibernate?在数据库或 Hibernate 中思考?
【发布时间】:2015-06-06 13:42:59
【问题描述】:

我是 Hibernate 的新手,在设计从数据库到 Hibernate 代码生成的关系时遇到了几个问题。我更喜欢使用外键约束来设计一对一、一对多、多对多的关系,因为这样更直观、更清晰。但是当使用 DB-Browser 生成代码时,我发现关系搞砸了,我必须对 xml 进行大量手动重写才能获得所需的关系。如果表发生变化,可能很难保持数据库和 Hibernate 之间的一致性。

你能给我一些建议来弥合数据库设计与 OOP 之间的差距吗?也许有不同的方法,例如,我认识的一些人不会在数据库中设计带有约束的关系,而是依靠 Hibernate 中的 xml 来定义关系。 换句话说,Hiberate 中的关系(部分)独立于数据库?

非常感谢。

【问题讨论】:

  • 如果整体数据库设计(内部数据库结构)本身被改变(不经常),那么它通常不会独立于环境的其余部分(回想一下 DBMS 中的逻辑数据独立性,这总是很难达到)。它不仅受限于 Hibernate 或任何其他 ORM,而且如果您使用普通 JDBC,也会发生同样的事情。

标签: java hibernate orm


【解决方案1】:

使用 ORM 时,您有 3 个关于您的域模型的“事实来源”:

  • 数据库
  • 映射

您需要做的是决定您将管理这 3(三)个中的哪 2(两个),并自动生成第三个。

我选择创建自己的类和映射,并让hbm2ddl 为我生成数据库。无论我想让数据库做什么,我都要确保我在映射中正确描述它(例如键、索引、列长度和约束)。如果我需要在我的数据库中做一些“自定义”的事情,我会确保我用各种休眠结构来描述它,例如:

最终结果是,新开发人员只需检查代码,运行 hbm2ddl“export”并立即开始处理项目,确保他/她的数据库架构与我的 100% 相同。

【讨论】:

    【解决方案2】:

    如果 xml 中的休眠映射让您感到不适,请检查:https://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

    在我看来,注解更加简洁并且可以轻松重构。

    【讨论】:

    • 是的,我想要对数据库进行低级控制。在我的情况下,注释可能是正确的方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2017-07-03
    • 2013-08-31
    • 2018-10-16
    • 2010-11-01
    相关资源
    最近更新 更多