jpa.hibernate.ddl-auto,springboot jpa hibernate
00-1010 JPA下hibernate的ddl-autoddl-auto配置。弹簧配置的具体关系见下图。JPA.hibernate.DDL-Auto。
00-1010今天做了一个报表函数,发现一个表中所有的shopProductId都为null,但是在程序中判断使用了shop ProductId,表中的部分product id不为null。在查找原因的路上,得知有人把productid改成了shopproductid,但是数据没有更新。
遇到这种情况,我们怎么能查看到某些字段被改变了呢?
由于我们使用的框架是springBoot jap-hibernate,然后在jpa下hibernate,在应用程序配置文件中,有
00-1010 DDL-auto:create程序每运行一次,如果没有表就会创建一个新表,如果有数据在里面就会清空表。每次程序结束时,DDL-auto3360create-drop将被清空。ddl-auto:update程序每次运行,如果没有表就会创建一个新表,表中的数据不会被清空。仅更新ddl-auto:validate。正在运行的程序会验证数据是否与数据库的字段类型相同,如果不同,就会报错。我们在启动项目的时候会提示哪个字段被修改了,这样在网上发布的时候就能及时发现,不会有错误。正常运行时,一般设置为更新属性。
00-spring . JPA . hibernate . DDL-auto可以显式设置,
的标准Hibernate属性值为none、validate、update、create、create-drop。
Spring Boot将根据数据库是否嵌入来选择默认值。
00-1010嵌入式类型数据库名称默认嵌入式hsqldb,h2,derbycreate-drop非嵌入式其他数据库无spring.jpa.hibernate.ddl-auto的四个属性的含义见下表:
函数create会在每次加载hibernate的时候删除最后生成的表,然后根据你的模型类重新生成一个新的表,即使两次都没有变化。这是数据库表数据丢失的一个重要原因。Create-drop在每次加载hibernate时都会根据模型类生成一个表,但是一旦sessionFactory关闭,这个表就会被自动删除。update最常用的属性,第一次加载hibernate时,会根据模型类自动建立表结构(前提是先建立数据库),以后加载hibernate时,会根据模型类自动更新表结构。即使表结构发生变化,表中的行仍然存在,以前的行不会被删除。需要注意的是,当部署到服务器时,表结构不会立即建立,而是在应用程序第一次运行后才建立。Validate每次加载hibernate时,它都会验证创建的数据库表结构只会与数据库中的表进行比较,不会创建新表,但会插入新值。此外,将执行启动时位于类路径根目录中的import.sql文件(前提是ddl-auto属性设置为create或create-drop)。这在演示或测试中很有用,但在生产环境中可能并不需要。
这是Hibernate的一个特性,与Spring无关。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。