springdata jpa:
问题:代码程序实体类更改,竟然改了数据库字段;
结果:希望实体类字段根据数据库表字段的更新而更新;不是数据库表根据实体类的更新而更新;
jpa:
database: MYSQL
show-sql: false
hibernate:
show-sql: false
ddl-auto: update
naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
properties:
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
解释:
ddl-auto:主要存在四种属性:create,create-drop,update和validate
- ddl-auto:create ----每次运行该程序,没有表格会新建表格,表内有数据会清空;
- ddl-auto:create-drop ----每次程序结束的时候会清空表
- ddl-auto:update ---- 每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新
- ddl-auto: validate ---- 运行程序会校验数据与数据库的字段类型是否相同,不同会报错。
补充:
jpa是一种规范,但是对jpa支持最好的就是hibernate,所以一般来说jpa指的就是hibernate是实现的jpa。在使用springboot时,使用jpa,加上jpa的起步以来spring-boot-starter-data-jpa即可。
在配置文件中除了配置数据源以外,还可以配置一些方便开发使用的选项,如spring.jpa.show-sql=true,这个属性可以在操作数据库时显示sql语句。
还有一个就是上面的ddl-auto。
如果希望实体类发生改动而数据库表做出相应的更改且不破坏数据库现有的数据,要将spring.jpa.hibernate.ddl-auto属性值设置为update,同时需要在实体类上的@Table注解中加上catalog属性,值为数据库命。
这里还有一点,就算把ddl-auto设置成update值,也不能识别对数据库表结构的所有更改,往往只能识别出增加的字段,比如修改字段名,修改字段类型或者删除一个字段都是不能够识别的。
总结:
所以说,数据库表结构修改了,如何让实体类自适应数据库表结构: