为啥我们需要创建数据库,而我们可以使用 Hibernate 生成它们? [复制]

Posted

技术标签:

【中文标题】为啥我们需要创建数据库,而我们可以使用 Hibernate 生成它们? [复制]【英文标题】:Why do we need to create databases while we can generate them using Hibernate? [duplicate]为什么我们需要创建数据库,而我们可以使用 Hibernate 生成它们? [复制] 【发布时间】:2013-08-15 10:14:28 【问题描述】:

我想知道为什么我们需要使用 Oracle 或 mysql 创建数据库,而我们可以使用诸如 Hibernate 之类的 ORM 轻松生成它们?

【问题讨论】:

【参考方案1】:

只是从相关的post中摘录:

始终建议手动生成架构,最好是 通过支持数据库模式修订的工具,例如伟大的 Liquibase。从实体生成模式非常有用 理论,但在实践中很脆弱,并导致很多问题 从长远来看(相信我)。 不同的应用程序可能使用相同的数据库,而不是所有的 他们将使用hibernate甚至java。数据库模式应该 不是由 ORM 规定的,它应该围绕数据和 业务需求 连接时的附加属性(通用术语不是 java 属性) 表在 RDBMS 中工作得很好,但有些复杂,而且 在 ORM 中使用效率低下。从 ORM -> RDBMS 做这样的映射 可能会创建效率不高的表。理论上是可以的 使用休眠生成的代码构建完全相同的连接表, 但在编写实体时需要特别小心

【讨论】:

【参考方案2】:

根据我的经验,我使用传统的 RDBMS 比 ORM 有更多的控制权。在设计/实现架构时使用 rdbms 进行测试更容易。

【讨论】:

以上是关于为啥我们需要创建数据库,而我们可以使用 Hibernate 生成它们? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们不能使用 RuntimeException 而不是创建自定义异常? [复制]

为啥需要从随机森林的数据中随机选择样本?

为啥我们使用指针而不是简单地创建特定大小的数组?

使用 Objective-C/Swift 单例模型,为啥我们要创建共享实例而不只是使用类方法? [复制]

为啥我们需要 HTTP 而不是 SSH?

为啥宁愿使用指向结构的指针而不是链表中的常规结构类型变量?