jpa可以配置生成正向工程或者逆向工程
- 正向工程:首先存在实体类,然后通过实体类来生成对应的数据表
- 逆向工程:首先存在数据表,然后通过数据表来生成对应的实体类
可以配置jpa设置中的 spring.jpa.generate-ddl
或者 spring.jpa.hibernate.ddl-auto
来设置是否根据实体类来生成对应的数据表
spring.jpa.hibernate.ddl-auto
的配置属性,一般使用update
即可
create: 每次运行程序都会删除原来的数据表,然后再重新创建一个数据表
create-drop: 每次都会创建一个数据表,数据表使用完毕之后,再数据表重新删除
none: 将功能关闭
update: 如果表的结构和实体类没有进行映射(实体类发生了一定的变化),那么数据表就会对应的进行更新
validate: 实体类和数据表进行校验,如果属性或者个数不一致,就会抛异常
初始化时对于另一个属性spring.jpa.generate-dll在理解上的困惑
可以参考这篇文章—-用属性控制Hibernate生成DDL。
按照它的描述,spring.jpa.generate-dll是jpa层面对数据表生成策略的控制,而spring.jpa.hibernate.ddl-auto是jpa实现hibernate层面上对数据表生成策略的控制。
实践也验证了文章里所说的,spring.jpa.generate-dll比spring.jpa.hibernate.ddl-auto有更强的控制力度,即使spring.jpa.hibernate.ddl-auto为none,只要spring.jpa.generate-dll为true,也会根据@Entity注解的实体类生成对应数据表。
按照文章的建议,为了避免混淆和不好理解,这两者最好不要混用,只对JPA实现层面的控制属性spring.jpa.hibernate.ddl-auto进行设置即可。
参考:SpringBoot启动时初始化数据库及spring.jpa.generate-dll与spring.jpa.hibernate.ddl-auto之间的困惑
SpringBoot启动时初始化数据库及spring.jpa.generate-dll与spring.jpa.hibernate.ddl-auto之间的困惑 - StarkBrothers - 博客园
application.properties
server.port = 8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://1.117.163.52:3306/flutter?serverTimezone=UTC
spring.datasource.username=flutter
spring.datasource.password=yu020506
#jpa 相关的配置
# 开发阶段可以设置为 true, 开启了逆向工程
# 数据库和Java之间存在两种关系: 正向工程和逆向工程
# 逆向工程: 存在数据库的表,然后数据库表可以生成实体类
# 正向工程: 首先存在实体类,然后根据实体类生成对应的数据库的表
#spring.jpa.generate-ddl=true
# create: 每次运行程序都会删除原来的数据表,然后再重新创建一个数据表
# create-drop: 每次都会创建一个数据表,数据表使用完毕之后,再数据表重新删除
# none: 将功能关闭
# update: 如果表的结构和实体类没有进行映射(实体类发生了一定的变化),那么数据表就会对应的进行更新
# validate: 实体类和数据表进行校验,如果属性或者个数不一致,就会抛异常
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect