服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - springboot中使用jpa下hibernate的ddl-auto方式

springboot中使用jpa下hibernate的ddl-auto方式

2022-07-29 11:26小丫头姗珊 Java教程

这篇文章主要介绍了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用jpa下hibernate的ddl-auto

今天做一个报表的功能,发现一个表中的shopProductId都为null,但在程序中判断用的是shopProductId,而且表中有productId不为null,在查找原因的途中,才得知是有人将productId改为了shopProductId,但是数据没有更新过去。

遇到这种情况,我们怎么能查看到某些字段被改变了呢?

由于我们用的框架是springBoot+jap-hibernate,然后在jpa下的hibernate,在application配置文件中,有

ddl-auto的配置

  • ddl-auto:create每次运行该程序,没有表格会新建表格,表内有数据会清空
  • ddl-auto:create-drop每次程序结束的时候会清空表
  • ddl-auto:update每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新
  • ddl-auto:validate运行程序会校验数据与数据库的字段类型是否相同,不同会报错

把ddl-auto改为validate时,我们启动项目时,会提示哪一个字段被更改,这样我们在发布上线时,会及时发现,不至于出现错误。而正常运行的时候,一般设置为update属性。 

spring.jpa.hibernate.ddl-auto的配置

spring.jpa.hibernate.ddl-auto 可以显式设置 spring.jpa.hibernate.ddl-auto ,

标准的Hibernate属性值有 none,validate,update,create,create-drop。

Spring Boot 会根据数据库是否是内嵌类型,选择一个默认值。

具体的关系见下

内嵌类型 数据库名称 默认值
内嵌 hsqldb, h2, derby create-drop
非内嵌 其他数据库 none

spring.jpa.hibernate.ddl-auto的四个属性的含义见下表:

属性值 作用
create 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update 最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
validate 每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

此外,启动时处于classpath根目录下的 import.sql文件会被执行(前提是ddl-auto属性被设置为 create 或create-drop)。这在demos或测试时很有用,但在生产环境中可能不期望这样。

这是Hibernate的特性,和Spring没有一点关系。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_37525569/article/details/80801165

延伸 · 阅读

精彩推荐
  • Java教程Springboot实现阿里云通信短信服务有关短信验证码的发送功能

    Springboot实现阿里云通信短信服务有关短信验证码的发送功能

    短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。下面通过本文大家分享Springboot实现...

    喝酒不骑马3472020-12-17
  • Java教程详解Spring Boot实现日志记录 SLF4J

    详解Spring Boot实现日志记录 SLF4J

    本篇文章主要介绍了详解Spring Boot实现日志记录 SLF4J,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    catoop4822020-09-30
  • Java教程java安全编码指南之:Mutability可变性详解

    java安全编码指南之:Mutability可变性详解

    这篇文章主要介绍了java安全编码指南之:Mutability可变性详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    flydean程序那些事3682020-09-15
  • Java教程FreeMarker配置(Configuration)

    FreeMarker配置(Configuration)

    所有与该configuration 对象关联的模版实例都就可以通过获得to_upper 转换器,company 来获得字符串,因此你不需要再一次次的往root 中添加这些变量了。如果你...

    wulei7462020-04-21
  • Java教程IDEA 2020.1.1好用的plugins插件推荐

    IDEA 2020.1.1好用的plugins插件推荐

    这篇文章主要介绍了IDEA 2020.1.1好用的plugins插件推荐,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    小天儿の5722020-07-17
  • Java教程浅谈springBoot注解大全

    浅谈springBoot注解大全

    本篇文章主要介绍了浅谈springBoot注解大全,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    tanwei8112492021-04-13
  • Java教程Java方法引用原理实例解析

    Java方法引用原理实例解析

    这篇文章主要介绍了Java方法引用的原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    零陵上将军_xdr9282021-11-19
  • Java教程java获取昨天日期字符串的方法

    java获取昨天日期字符串的方法

    这篇文章主要介绍了java获取昨天日期字符串的方法,涉及java针对日期与时间的运算与转换等相关操作技巧,需要的朋友可以参考下 ...

    々上善若水々5342020-06-06