内容简介:Hiberate可以根据我们定义的@Entity实体类,来自动生成表结构,在一定程度上,你不需要与SQL打交道。在Spring Boot配合Hibernate使用的时候,可以定义属性来控制这种行为。如图所示:除了这个属性之外,Spring Boot还有另外一个属性:都是生成ddl相关的,他俩有啥区别呢?我翻阅了好多源码和
Hiberate可以根据我们定义的@Entity实体类,来自动生成表结构,在一定程度上,你不需要与 SQL 打交道。在Spring Boot配合Hibernate使用的时候,可以定义属性来控制这种行为。如图所示:
- create表示每次应用启动的时候,都会将之前的表全部drop掉,重新根据实体类生成一遍。
- create-drop在create的基础上,在应用关闭的时候还会drop一次。
- update可能是比较常用的,每次启动的时候会看看实体类有什么变化,然后看需不需要更改表结构。
- validate不会对表进行更改,但是会看看他和实体类是否对应
- none什么都不做
除了这个属性之外,Spring Boot还有另外一个属性:
都是生成ddl相关的,他俩有啥区别呢?我翻阅了好多源码和 文档 ,得出了结论:spring.jpa.generate-ddl是更高层次上的抽象,他和具体的JPA实现无关,spring.jpa.hibernate.ddl-auto是和Hibernate相关的更具体的设置。前者会影响到后者,最好不要两者混用,容易混淆。在实践中,直接用后者就行。
如果你非得使用spring.jpa.generate-ddl,或者你看到别人用了他,那么你需要搞清楚:他的默认值是false,如果你显式设置为true,最后框架会选择update方式(从HibernateJpaVendorAdapter的源码可以看出)。
如果两个属性都没有配置,那么系统会判断你使用的是不是内置数据库(hsqldb, h2, derby),如果是的话会选用create-drop策略,其他情况是none策略。
好用么?
说实话,不堪重用。我将spring.jpa.hibernate.ddl-auto设置为update,同时把实体类的某个@Column属性删除了,按理说,我重新启动下应用,对应的字段应该被删除才对,但事实上,并没有。这就坑了,当需要精细地控制表结构的时候,你会感觉使不上力。
所以,在生产环境,还是不要用本文介绍的特性为好,选择更直接地方式去控制表结构。比如使用 Flyway 或者 Liquibase 来管理,因为你可以手写DDL相关的SQL语句,或者你们有DBA的话,交给他来处理。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 将所有类定义为Scala中的情况,只是让所有参数自动生成属性是否正确?
- 利用 xml.dom.minidom 生成 xml,解决属性无序问题和xml声明单独一行
- MyBatis Generator配置文件--指定生成实体类使用实际的表列名作为实体类的属性名
- CSS 属性篇(七):Display属性
- JavaScript对象之数据属性与访问器属性
- Logback file属性 与 fileNamePattern属性的关系
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Concepts, Techniques, and Models of Computer Programming
Peter Van Roy、Seif Haridi / The MIT Press / 2004-2-20 / USD 78.00
This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them p......一起来看看 《Concepts, Techniques, and Models of Computer Programming》 这本书的介绍吧!
Markdown 在线编辑器
Markdown 在线编辑器
HSV CMYK 转换工具
HSV CMYK互换工具