MET*_*IBI 75 ddl spring hibernate database-connection jpa
实际上我正在开发我的Spring启动应用程序项目,我注意到有时在另一台服务器(SQL Server)上的数据库连接超时,特别是当我尝试使用FlyWay进行一些脚本迁移时,但是尝试.我注意到我没有在我的属性中指定FlyWay.然后我做了一些研究,发现建议加入
spring.jpa.hibernate.ddl-auto开发.并将其改为:spring.jpa.hibernate.ddl-auto= create-drop生产中.但我实际上并没有理解它是如何工作的,以及hibernate如何生成数据库模式,创建值或使用none.您能否从技术上解释它是如何工作的,以及在开发和生产服务器中使用此属性的建议是什么.谢谢
Nar*_*ros 137
对于记录,该spring.jpa.hibernate.ddl-auto属性是特定于Spring Data JPA的,并且是指定最终将在其知道的属性下传递给Hibernate的值的方式hibernate.hbm2ddl.auto.
值create,create-drop,validate,和update基本上影响架构管理工具将如何处理在启动数据库模式.
例如,update操作将查询JDBC驱动程序的API以获取数据库元数据,然后Hibernate基于读取带注释的类或HBM XML映射来比较它创建的对象模型,并将尝试即时调整模式.
update例如,该操作将尝试添加新列,约束等,但永远不会删除先前可能已存在但不再作为先前运行中的对象模型的一部分的列或约束.
通常在测试用例场景中,您可能会使用create-drop以便创建架构,测试用例添加一些模拟数据,运行测试,然后在测试用例清理期间,删除架构对象,留下空数据库.
在开发过程中,通常会看到开发人员使用update自动修改架构以在重新启动时添加新添加项.但是再次理解,这不会删除不再需要的先前执行中可能存在的列或约束.
在生产中,通常强烈建议您使用none或者根本不指定此属性.这是因为DBA通常会查看迁移脚本以查找数据库更改,尤其是在跨多个服务和应用程序共享数据库的情况下.
Md.*_*bib 17
在 Spring/Spring-Boot 中,可以根据您的堆栈以不同的方式初始化 SQL 数据库。
JPA 具有 DDL 生成功能,这些功能可以设置为在启动时针对数据库运行。这是通过两个外部属性控制的:
spring.jpa.generate-ddl (boolean) 打开和关闭该功能并且独立于供应商。spring.jpa.hibernate.ddl-auto(enum) 是一个 Hibernate 特性,它以更细粒度的方式控制行为。有关更多详细信息,请参见下文。Hibernate 属性值是:create、update、create-drop、validate 和 none:
如果未检测到模式管理器,则 Spring Boot 在内部将此参数值默认为 create-drop,否则对于所有其他情况都没有。
ker*_*ter 12
还取决于spring.jpa.hibernate.ddl-autoDML 文件功能是否启用
值得了解它们之间的区别。
基本上有 3 种类型的数据库模式创建(DDL)和导入数据(DML):
本主题涵盖 Hibernate 及其 DDL(第一个选项),但值得一提的是 Hibernate DML 文件功能,该功能启用 if spring.jpa.hibernate.ddl-autoiscreate或create-drop
这意味着import.sql类路径的根目录中将由 Hibernate 在启动时执行。如果您小心的话,这对于演示和测试很有用,但可能不是您希望在生产中的类路径中出现的东西。这是一个 Hibernate 功能(与 Spring 无关)。
这里还有一个表格,解释了spring.jpa.hibernate.ddl-auto是否import.sql可以根据spring.jpa.hibernate.ddl-auto指定的值使用:
| spring.jpa.hibernate.ddl-auto | 从实体创建模式 | 导入.sql |
|---|---|---|
| 创造 | 真的 | 真的 |
| 更新 | 从实体更新架构 | 错误的 |
| 创建-删除 | 真的 | 真的 |
| 证实 | 错误的 | 错误的 |
| 没有任何 | 错误的 | 错误的 |
另外,有关不同类型的 DDL 和 DML 的一些额外信息可以在 Spring 文档中找到
| 归档时间: |
|
| 查看次数: |
98938 次 |
| 最近记录: |