【发布时间】:2018-06-14 23:11:25
【问题描述】:
Answer 说,不要相信 hibernate.hbm2ddl.auto 的生产设置。
我对使用ORM的理解:
1) 避免在数据库层(比如 RDBMS)设计和规范化数据库模式。在 mongoDB 世界中,使用的是 ODM。
2) 避免在代码中嵌入 SQL 查询语言(比如 java)。
3) 只考虑存储和检索对象(在 OOP 意义上)
运行 DDL 脚本打破了使用 ORM 工具的目的,看起来类似于 JDBC 方法,只是它为特定于供应商的数据库提供 SQL 方言。
对于生产,是否可以强制运行 DDL 脚本以确保安全?
【问题讨论】:
-
"手动运行 DDL 脚本会破坏使用 ORM 工具的目的。" - 谁说的? (并不是说你必须手动运行它们,你可以使用 Flyway 之类的工具来管理你的 DDL 脚本的执行)
-
@ErwinBolwidt 啊,手动还是其他方式都无所谓。 ORM主要是为了避免这个阶段
-
不,不是。您似乎误解了 ORM 的用途。
-
Java 中的 ORM 工具大多(总是?)运行在 JDBC 之上。它们是一种抽象,意味着您可以与对象交互而不是编写 SQL 查询,自动方言翻译是它们提供的一个非常小的功能。 JPA 特别是(Hibernate 实现的)还可以帮助您进行会话和事务管理。
-
ORM 绝对不是关于“避免在 RDBMS 世界中设计和规范化模式”。不过,它与 2 和 3 有更多关系。 ORM 使您能够编写面向对象的代码以与数据库交互。您仍然应该首先设计您的数据库,然后在数据库的结构之后映射您的类 - 而不是相反。使用 ORM 不会以任何方式防止您遇到结构不良的表的问题。