java - spring.jpa.hibernate.hbm2ddl 和 spring.jpa.hibernate.ddl 的区别

标签 java spring hibernate spring-boot jpa

有什么区别spring.jpa.hibernate.hbm2ddl spring.jpa.hibernate.ddl ?

我在这个问题中找到了:What are the possible values of spring.datasource.initialization-mode? OP 在属性中同时使用两者,但它似乎是 hbm2ddl 的起源是直接 hibernate 而不是 Spring Data Jpa。

尽管如此,阅读 answer从另一个 OP 来看,它看起来只是直通。

然而,在我们使用 mariadb 的商业项目中,当我们没有使用 优雅地关闭我们的 Spring Boot 应用程序时spring.jpa.hibernate.hbm2ddl.auto=create ,当应用程序再次运行时,它会删除旧数据并从头开始创建所有内容。另一方面与 spring.jpa.hibernate.ddl.auto=create 每第二次运行(在没有正常关闭应用程序之后)都会导致关键约束异常(DB 在创建之前不是 dropper)

最佳答案

  • 从这里 Link
  • 默认情况下,仅当您使用嵌入式数据库(H2、HSQL 或 Derby)时,才会自动创建 JPA 数据库。

  • 您可以使用 spring.jpa.* 显式配置 JPA 设置。特性。例如,要创建和删除表,您可以在 application.properties 中添加以下行:
    spring.jpa.hibernate.ddl-auto=create-drop
    
    Hibernate 自己的内部属性名称(如果你碰巧记得更好的话)是 hibernate.hbm2ddl.auto .
  • 从这里 Link
  • spring.jpa.hibernate.ddl-auto这其实是"hibernate.hbm2ddl.auto"的快捷方式属性(property)。
    默认为 "create-drop"当使用嵌入式数据库并且未检测到模式管理器时。否则,默认为 "none" .
  • 从这里 Link
  • Spring Boot 可以自动创建 DataSource 的模式(DDL 脚本)并对其进行初始化(DML 脚本)。
  • 它从标准的根类路径位置加载 SQL:schema.sqldata.sql , 分别。
  • 另外,Spring Boot 处理了 schema-${platform}.sqldata-${platform}.sql文件(如果存在),其中平台是 spring.datasource.platform 的值.
  • 这允许您在必要时切换到特定于数据库的脚本。例如,您可以选择将其设置为数据库的供应商名称(hsqldb、h2、oracle、mysql、postgresql 等)。
  • 关于java - spring.jpa.hibernate.hbm2ddl 和 spring.jpa.hibernate.ddl 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060870/

    相关文章:

    java - 如何将 url 参数绑定(bind)到 jax-rs 中的 Controller 参数对象

    java - 如何检查URL是否是本地机器?

    java - 为包含 boolean 字段的持久实体覆盖 hashCode() 的正确方法?

    MYSQL:为 'comments' 列生成 ID 的完美方法

    java - Hibernate:检索未连接的行

    java - jboss 关机没有发生,停留在消息 : Closing Spring root WebApplicationContext

    java - 在 Eclipse 中调试(Java);中断查看值时不能将鼠标悬停在变量上

    java - 我想制作搜索框以通过android studio从mysql获取数据

    java - JavaFX 中的控制台面板

    spring - 如何将 “new line”放入Spring表达式语言中?